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
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
Cómo alterar la configuración de PHP sin acceder al php.ini

Cómo alterar la configuración de PHP sin acceder al php.ini

Cómo hacer para...
Existen situaciones en las que necesitamos modificar ciertos parámetros de la configuración de PHP (Por ejemplo, la cantidad de memoria permitida para un script o el tiempo máximo de ejecución) para que cierto código funcione correctamente. Desafortunadamente, no siempre podemos hacerlo del modo normal, es decir, modificando el archivo php.ini. Es más, existen casos en los que no querremos que estos cambios tengan efecto en scripts diferentes del que estamos desarrollando. El típico caso en que esto sucede es un entorno de hosting compartido. Algunos proveedores dan acceso a una versión particular del archivo por cada sitio que alojan, aunque la mayoría no lo permiten en absoluto (Es lógico si se piensa un poco, un servidor en el que corren muchas aplicaciones debe hacer un gran esfuerzo por evitar que un…
Leer más
Cómo consumir un WebService SOAP con PHP

Cómo consumir un WebService SOAP con PHP

Cómo hacer para...
Los WebServices son un mecanismo muy útil para integrar aplicaciones a través del protocolo HTTP. Una de las formas en que se implementan estos mecanismos es a través de SOAP. Consumirlos usando PHP es bastante simple, para ello se utiliza la clase SOAPClient. Veamos un ejemplo de cómo consultar la localización física según la IP: <?php $url = "http://ws.cdyne.com/ip2geo/ip2geo.asmx?wsdl"; try { $client = new SoapClient($url, [ "trace" => 1 ] ); $result = $client->ResolveIP( [ "ipAddress" => $argv[1], "licenseKey" => "0" ] ); print_r($result); } catch ( SoapFault $e ) { echo $e->getMessage(); } echo PHP_EOL; En este caso, este script debería ser corrido desde CLI (Por ejemplo, si lo guardás como "ws.php", al ejecutar php ws.php 210.45.151.101 obtendrás la salida: stdClass Object ( [ResolveIPResult] => stdClass Object ( [City] => Huainan…
Leer más
Cómo prevenir los ataques por SQL Injection en aplicaciones PHP

Cómo prevenir los ataques por SQL Injection en aplicaciones PHP

Cómo hacer para...
Uno de los fantasmas más temidos por quienes contratan servicios de desarrollo (especialmente cuando se trata de su primera experiencia) es el de los ataques de hackers. Si bien es imposible asegurar al 100% un sistema (de software o de cualquier otro tipo), existe una serie de buenas prácticas que disminuyen sensiblemente la probabilidad de ocurrencia de tales ataques (o al menos, su probabilidad de éxito). Por lo general, los ataques se basan en la explotación de código vulnerable como ser algún caso raro que el desarrollador no tuvo en cuenta. Uno de los ataques más usuales es el conocido como sql injection. De lo que se trata es de ejecutar código sql sin autorización. Los scripts de PHP que no están bien escritos pueden ser atacados de esta forma. Veamos un ejemplo: <?php $sql…
Leer más
Cómo evitar el auto-logout en una aplicación web hecha en PHP

Cómo evitar el auto-logout en una aplicación web hecha en PHP

Cómo hacer para...
En un proyecto que hice para un cliente de Leeway me sucedió algo que no había previsto: un formulario dinámico resultó muy largo para la persona que tenía que realizar la carga y, cuando terminó el sistema la deslogueó automáticamente y perdió su trabajo :( Analizando un poco el problema me di cuenta de que la sesión había expirado a pesar de que el usuario estaba interactuando con el sistema... sólo que no se estaba produciendo ninguna comunicación cliente-servidor, ya que toda la acción estaba pasando del lado cliente. La solución que encontré fue diseñar un mecanismo de tipo keepAlive de modo de avisar al servidor que todavía había actividad del lado del cliente (¡y pedir por favor que no dejen afuera!). Lo primero que hice entonces fue agregar este pequeño…
Leer más