Cómo definir la configuración de la sesión en Symfony

Cómo definir la configuración de la sesión en Symfony

Cómo hacer para...
Ante todo, una aclaración: PHP maneja las sesiones a través de cookies (Antiguamente también se podía propagar el ID de sesión vía URL, aunque es una práctica muy poco segura y, sinceramente, hace mucho que no lo veo). Bien, ahora... ¿qué cosas podrías querer cambiar de la configuración de la sesión? Varias. El nombre de la cookie El tiempo de duración El lugar donde se almacena la información del lado del servidor Sobre la segunda y la tercera, acá tenés un ejemplo de por qué querrías hacerlo :) Respecto de la primera, más que nada se trata de un tema de seguridad. Fijate esta captura de pantalla de la consola del navegador: El nombre PHPSESSID es el nombre por defecto que se le asigna a la cookie de sesión de una…
Leer más
Cómo enviar mails con formato usando SwiftMailer

Cómo enviar mails con formato usando SwiftMailer

Cómo hacer para...
Ya he comentado en otros artículos sobre las diferentes posibilidades para enviar emails usando PHP. De todas las que he probado hasta el momento, SwiftMailer es la que me resulta más cómoda y conveniente, sin embargo, he tenido algunas peleas a la hora de enviar mails con formato (es decir, mails que contengan HTML que necesito que sea entendido como tal y no como mero texto). La verdad es que es bastante simple lograrlo, sólo hay que conocer el método adecuado :) En general, lo que uno hace cuando quiere enviar un email es algo como esto: $message = (new Swift_Message()) ->setSubject('Este es el asunto') ->setFrom(['mauro.chojrin@leewayweb.com' => 'Mauro Chojrin']) ->setTo(['destinatario@dominio.com' => 'Gran Amigo']) ->setBody('Este es el importante mensaje que quiero enviarte!!') ; El problema (si puede llamársele así) es que…
Leer más
Cómo definir relaciones Cero-a-Uno con Doctrine

Cómo definir relaciones Cero-a-Uno con Doctrine

Cómo hacer para...
En general cuando uno comienza a estudiar Bases de Datos Relacionales se habla de un tipo de relación Uno-a-Uno que, en la práctica se usa muy poco. Sin embargo las relaciones tipo Cero-a-Uno tienen muchísimo sentido. Es el caso de que se quiera modelar un sistema donde una entidad es un caso especial de otra (Algo similar al concepto de herencia de POO), como por ejemplo la relación entre personas y actores: Todos los actores son personas No todas las personas son actores La forma de implementar esto en una base de datos relacional es poner un campo tipo clave foránea en la tabla hija, el cual a su vez tendrá un índice único (Para reforzar la cardinalidad de la relación). En el caso del ORM Doctrine, todo esto parte de la…
Leer más
Cómo usar el intérprete de PHP de una VM desde PhpStorm

Cómo usar el intérprete de PHP de una VM desde PhpStorm

Cómo hacer para...
Una práctica muy buena a la hora de programar (y ahorrarse dolores de cabeza) es el uso de máquinas virtuales. Muchos desarrolladores usan este esquema, sin embargo, también es bastante común que tengan sus propias versiones del software usado para ejecutar sus aplicaciones instalado en su máquina física (por ejemplo PHP). Si estás trabajando en varios proyectos a la vez, los cuales están deployados en servidores diversos, es muy probable que en cada VM tengas instalada una versión diferente de PHP (La misma que tenés en el servidor de producción), con lo cual, al menos una VM debe tener instalada una versión diferente de PHP que la que tenés instalada en tu máquina. Como usás una VM no deberías tener mayores dificultades a la hora de deployar, pero a la hora…
Leer más
Cómo debuggear una aplicación PHP sin usar var_dump

Cómo debuggear una aplicación PHP sin usar var_dump

Cómo hacer para...
Una de las tareas que más tiempo consume durante el desarrollo de una aplicación (web o no) es el debugging. Ese momento en que estás seguro de que todo anda bien, pero por las dudas... hay que probarlo. Y, como siempre, algo no sale exactamente como esperabas. Es entonces cuando te toca arremangarte, buscar una nueva taza de café, silenciar el teléfono y hurgar. El modo común de encarar esta tarea en el universo php es usar mucho la función var_dump (Algo bastante feo de lo que hablo en más detalle en mi libro). Asumiré que ya sabés de qué se trata xdebug, que ya está instalado y configurado en tu entorno y que estás familiarizado (un poco al menos) con PhpStorm. Desde dentro del IDE podés lanzar tu aplicación usando el botón…
Leer más

Cómo funciona el conversor de parámetros de Symfony

Cómo hacer para...
Cada vez que conozco más del framework Symfony, más me gusta :). Esto que te voy a mostrar a continuación me pareció un acto de magia cuando me lo crucé por primera vez: el conversor de parámetros. En la mayoría de los Controllers (especialmente cuando se trata de CRUDs), se recibirá algún parámetro que será la clave para encontrar el objeto sobre el que se quiere realizar la operación, por ejemplo: public function showAction(Request $request) { $client = $this->getDoctrine()->getRepository('AppBundle:Client')->find($request->getParameter('id'); if ( $client ) { ... } else { // 404 } } Es muy común ver código de este tipo. De hecho, si lo miramos desde un poco lejos notaremos que hay una estructura en común en estas operaciones: Buscar el objeto Si se encontró, procesar normalmente Si no se…
Leer más
Cómo logear errores con PHP

Cómo logear errores con PHP

Cómo hacer para...
Es una realidad conocida por todos los programadores el hecho de que, por más esfuerzo que pongamos, los usuarios se las arreglan para encontrar errores antes que nosotros :). No sólo eso, lo más probable es que, al reportar un error (o intentar hacerlo), no tengan mucho más para decirnos que "No hice nada y el sistema se colgó"... evidentemente, no es un panorama muy alentador como punto de partida para encontrar (e implementar) una solución, ¿cierto? Es ahí donde tener un buen log de errores puede hacer la diferencia entre perder el relax del fin de semana o dejar a superman opacado en los ojos del cliente. Veamos entonces algunas técnicas para contar con esa información cuando se la necesita (y sí... tarde o temprano la vas a necesitar). La…
Leer más
Qué es y para qué sirve PHP Mess Detector

Qué es y para qué sirve PHP Mess Detector

Herramientas
PHPMessDetector es una herramienta que ayuda a detectar código defectuoso en proyectos PHP (Muy útil a la hora de realizar auditorías de código ajeno). Se basa en el análisis automatizado del código utilizando conjuntos de reglas. Estas reglas buscan detectar código mal estructurado, mala nomenclatura, métodos exageradamente grandes, ciclos ineficientes y demás. Está preparado para emitir su salida en diferentes formatos (Texto, XML, HTML). Su uso es bastante simple, hay que instalarlo y luego corre como una utilidad de línea de comandos. Por ejemplo, corriendo el comando php phpmd.phar . text naming Sobre una base de código algo dudoso, obtuve un resultado como este: /home/mauro/sitio/authorize/authorizenet.php:11 Classes should not have a constructor method with the same name as the class/home/mauro/sitio/authorize/authorizenet.php:11 Classes should not have a constructor method with the same name as the…
Leer más
¿Una clase abstracta siempre tiene que tener un método abstracto?

¿Una clase abstracta siempre tiene que tener un método abstracto?

Misceláneos
Respuesta corta: NO (Al menos en PHP). ¿Querés los detalles? Seguí leyendo... Esta pregunta surgió en una clase de POO y me pareció interesante compartir la respuesta ya que no es realmente trivial. El ejemplo que estábamos viendo era el siguiente: Teníamos un sistema que manejaba clientes, con lo cual, contaba con una clase Cliente: class Cliente { private $nombre; private $apellido; private $cuit; private $email; public function __construct( $nombre, $apellido, $cuit, $email ) { $this->setNombre($nombre); ... } public function setNombre( $nombre ) { $this->nombre = $nombre; } ... } Pronto vimos la necesidad de especializar esta clase en tres subclases diferentes: class PYME extends Cliente { } class PersonaFisica extends Cliente { } class Multinacional extends Cliente { } Dado que los requerimientos del sistema quedaron más claros y era…
Leer más
Cómo manipular imágenes usando PHP

Cómo manipular imágenes usando PHP

Cómo hacer para...
ImageMagick es una aplicación muy potente para la manipulación de imágenes. Por lo general, se utiliza desde la línea de comandos en ambientes Linux. ImageMagick es capaz de trabajar con una amplia variedad de formatos de imágenes y realizar una gran cantidad de transformaciones sobre ellas. PHP cuenta con una API propia para que su utilización sea sencilla (Obviamente, requiere que primero se instalen las bibliotecas necesarias): la clase Imagick. Una instancia de Imagick trabaja asociándole una o más imágenes al momento de su construcción (pasándole un string o un array según el caso): $ig = new \Imagick("mi_imagen.jpg"); $ig2 = new \Imagick( ["mi_imagen.jpg", "otra_imagen.png"]); A partir de ese momento es posible realizar modificaciones a la imagen simplemente invocando los métodos de la clase, por ejemplo: $ig->resizeImage( $width, $height, \Imagick::FILTER_BOX, 0.9 ); Permite…
Leer más