Cómo saber el controlador que maneja una ruta en Symfony

Cómo saber el controlador que maneja una ruta en Symfony

Cómo hacer para...
El framework Symfony es de lo mejorcito que tenemos en el mundillo de PHP (Personalmente es mi favorito por lejos). Para procesar un request se requiere un método de alguna clase (Un controlador). Para decidir cuál es el controlador al que se debe invocar al momento de responder al pedido de un usuario se utiliza un componente llamado Router. Este componente conoce el mapeo entre una URI y dicho controlador. Existen diversos modos de definir este mapeo (por ejemplo mediante annotations). Esto hace que, si una aplicación es grande, puede ser algo complejo encontrar cuál es exactamente el controlador que se esconde detrás de una URL. En este artículo te mostraré un pequeño truco para obtener esa información. Voy a asumir que estás en algún tipo de consola POSIX (Linux,…
Leer más
Cómo resolver el Problema del N+1 en PHP y MySQL

Cómo resolver el Problema del N+1 en PHP y MySQL

Cómo hacer para...
Qué es el problema del N+1 Se trata de un problema de optimización de consultas a una base de datos. Imagina que tienes una base de datos con dos tablas: UsersPhoneNumbers Donde cada usuario puede tener muchos números telefónicos (Relación 1:N). Ahora, imagina que tienes que mostrar un listado de todos los usuarios junto con sus números de teléfono. Una forma de resolverlo sería utilizar una consulta tipo: SELECT * FROM users; Y luego: foreach ($users as $user) { $sql = "SELECT * FROM phone_numbers WHERE user_id = {$user->getId()};"; ... } Lo que sucede aquí es que realizamos una consulta para obtener todos los usuarios y luego, una más por cada uno. De ahí que el número total de consultas que se realizan es N (Número de usuarios) + 1.…
Leer más
Cómo ordenar un array multidimensional en PHP

Cómo ordenar un array multidimensional en PHP

Cómo hacer para...
La estructura de datos más utilizada en PHP es, por lejos, el arreglo. Esto se debe a que la implementación de ellos es extremadamente flexible. Un problema común que nos encontramos es el ordenarlos. Cuando los arreglos son de una única dimensión no hay mucho problema, basta una función como sort, pero cuando el arreglo es una matriz las cosas son un poco más complejas ya que pueden existir diferentes criterios de filtro. Por ejemplo, si tu arreglo se ve así: [ [ 'name' => 'Juan', 'age' => 40, ], 'name' => 'Alberto', 'age' => 60, ], ] El resultado será diferente si queremos ordenar por age que por name Claro que podrías usar una solución diseñada por tí mismo basada en un par de ciclos anidados y seguramente funcionaría,…
Leer más
Cómo redireccionar a un visitante usando PHP

Cómo redireccionar a un visitante usando PHP

Cómo hacer para...
Una necesidad muy común en el desarrollo web es la de redireccionar a un visitante hacia algún otro sitio. Esto sucede cuando el recurso buscado no se encuentra en la URL exacta que se ha solicitado pero se sabe cuál es la correcta. Para qué sirve una redirección Las redirecciones se utilizan fundamentalmente por estos motivos: Para unificar URLs (Por ejemplo para que http://misitio.com y http://misitio.com/ muestren el mismo conenido y los buscadores no las interpreten como contenido duplicado)Para no perder el posicionamiento logrado cuando cambia el contenidoPara evitar que se realicen múltiples veces procesos que deberían realizarse una única vez. Cómo funcionan las redirecciones Cuando un usuario visita un sitio web lo que sucede por detrás es que su navegador se conecta a un servidor y le solicita un…
Leer más
Cómo usar cookies con PHP

Cómo usar cookies con PHP

Cómo hacer para...
Qué son las cookies No puedo explicar cómo se usan las cookies sin primero tener una idea clara de qué son, ¿cierto? Las cookies (en el contexto de una aplicación web) son datos que se almacenan del lado del cliente y que se envían al servidor junto con cada petición. Cómo funcionan las cookies Para comprender cómo funcionan las cookies es importante repasar un poco el modelo de ejecución de una aplicación web debemos tener en la cabeza dos lugares y momentos diferentes para los que debemos preparar a nuestras aplicaciones: El servidor El cliente El código PHP que escribimos se ejecuta íntegramente del lado del servidor. En el contexto de una aplicación web, esto sucede como respuesta a una petición realizada por un cliente. El servidor responde, usualmente, con…
Leer más
Cómo migrar un sitio web sin interrumpir el servicio

Cómo migrar un sitio web sin interrumpir el servicio

Cómo hacer para...
La tarea de migrar un sitio web no es particularmente sencilla. Obviamente, no todos los sitios tienen la misma infraestructura, con lo cual, lo que te voy a contar no necesariamente aplica a tu caso, pero espero que te lleves algunas ideas que puedan ayudarte. Voy a suponer por el momento que tu sitio tiene los componentes típicos: Una base de datosUn paquete de código Si tu sitio está online existe, al menos, un servidor donde está alojado. Y por último, hay un par de componentes muy importantes si el sitio es accesible para todo público: Un dominioUna serie de registros de DNS Supongamos que el servidor donde está la base de datos no es el mismo que donde reside la aplicación, es decir, lo que querés hacer en principio…
Leer más
Cómo armar una tabla pivot con PHP y MySQL

Cómo armar una tabla pivot con PHP y MySQL

Cómo hacer para...
Hurgando en las profundidades de la Internet me encontré con una pregunta muy interesante. El autor comentaba que tenía una tabla con esta pinta: Y quería, mediante una consulta a MySQL, obtener un resultado de este tipo: Básicamente el desafío era transformar datos horizontales (los valores de la columna "endpoint" para cada fila) en verticales, es decir, columnas de la respuesta. No es algo que se vea todos los días, cierto, pero... ¿cómo rechazar un desafío semejante? :) Inmediatamente me vino a la mente el concepto de Tabla Pivot que manejan las planillas de cálculo. Así que me arremangué y escribí este SQL: SELECT FROM_UNIXTIME(FLOOR((UNIX_TIMESTAMP(fecha_hora))/60)*60) as fecha_hora, SUM( CASE WHEN endpoint = 50 THEN numero_personas ELSE 0 END ) as suma_personas_ep50, SUM( CASE WHEN endpoint = 51 THEN numero_personas ELSE…
Leer más
Cómo usar Docker en proyectos PHP

Cómo usar Docker en proyectos PHP

Cómo hacer para..., Herramientas
Hace tiempo que vengo usando (¡y abogando por su uso!) máquinas virtuales para mis proyectos PHP. Hasta ahora me venía manejando con Vagrant y debo decir que me ha dado unas cuantas satisfacciones. Sin embargo, hay algunos problemas derivados de su uso: Las VM se pueden volver muy pesadasOcupan mucho espacio en el discoSon lentas de levantarNo es sencillo tener muchas corriendo a la par (Consumen muchos recursos de hardware)No es fácil asegurarme de que en Producción y en Desarrollo tengo exactamente el mismo software instalado. Investigando un poco y, hay que decirlo también, por consejo de algunos colegas me metí con docker. Qué es Docker Docker es una herramienta de virtualización basada en un concepto algo diferente al que usa Vagrant: los contenedores. No me voy a meter acá…
Leer más
Cómo usar URLs amigables con el Servidor Web Incorporado a PHP

Cómo usar URLs amigables con el Servidor Web Incorporado a PHP

Cómo hacer para...
Es muy común, desde la versión 5.4 de PHP, usar el servidor que viene incorporado mientras estamos en un ambiente de desarrollo (¿Para qué negarlo? ¡Es sumamente cómodo!). Un problema que sucede a menudo al utilizarlo es cómo usar URLs amigables. Por ejemplo, a un sitio web productivo no vas a querer que se acceda mediante algo como: https://misitio.com/index.php?fecha=2019-06-25&slug_categoria=top10 Más bien vas a preferir algo como: https://misitio.com/articulos/2019-06-25/top10 ¿O no? El problema es que, en el caso de PHP, las variables que se reciben a través de la URL son accesibles a los scripts a través de la variable $_GET. Claro que, para que esto suceda, estas URLs deben estar escritas respetando el formato canónico: La separación entre URLs y parámetros se marca con el caracter "?"La separación entre nombre del…
Leer más
Cómo pasar una variable de JavaScript a PHP

Cómo pasar una variable de JavaScript a PHP

Cómo hacer para...
Si estás programando algún sistema web medianamente complejo, es muy probable que te hayas enfrentado a este problema alguna vez. En muy resumidas cuentas, lo que estás intentando hacer es algo como: var variable_js = 2; $variable_php = variable_js; Sería lindo que todo funcionara de esa forma, ¿no? Lamentablemente, la cosa no es tan fácil (Pero tampoco es tan difícil en realidad). Por qué no se puede pasar directamente un valor de Js a PHP Esta pregunta esconde un poco de confusión respecto de cómo funcionan las aplicaciones web. Algo parecido a lo que comentaba en este artículo. El punto es que PHP y JavaScript se ejecutan en lugares y momentos diferentes. Es como si estuvieses leyendo un libro y te encontraras con algo que no comprendés del todo y…
Leer más