November 3rd, 2011 Category: php5 Programacion
No Comments »
Como nos dice nuestro maestro Martin Fowler, este patron se utiliza para reducir el numero de lladas a un objeto pasando como parametro un objeto que contenga todos los datos necesarios.
Estoy haciendo un mini proyecto, que pronto subire a github para compartir con ustedes (una vez que termine la documentacion
), en el cual necesito recibir una cantidad de datos, y para evitar que me pasen muchos parametros, opte por recibir un json, con todos los datos. Ahora el problema es que en ese json la persona que usa el servicio puede mandar parametros de mas, o de menos.
Ahora, para que esto sea algo ordenado, cree un Data Transfer Object, con las propiedades que necesito recibir en el json que me envian como parametro.
El servicio que recibe el json, va a instanciar este Data Transfer Object, y despues vamos a pasarle al modelo al metodo save el objeto completo.
Un paso previo deberia ser validar que los datos que recibo via Json sean correctos una vez que lo paso al DTO.
Supongamos que nuestra funcion encola mails a enviar.
Nuestro DTO sera el siguiente
class Application_Model_Mail_DTO
{
public $from;
public $to;
public $cc;
public $bcc;
public $subject;
public $replyTo;
public $htmlBody;
public $textBody;
public $templateParams;
public $htmlTemplate;
public $textTemplate;
}
El metodo que recibe el JSON, seria el sigueinte.
...
public function enqueue($data)
{
$data = Zend_Json::decode($data);
$dto = new Application_Model_Mail_DTO();
$dto->from = $data[‘from’];
$dto->to = $data[‘to’];
// … asi sucesivamente hasta cargar todas las propiedades
$model = new Application_Model_Mail();
$model->save( $dto );
}
Ok, esto es bastante tedioso y termina generando un codigo muy largo para algo que podemos resolver en pocas lineas usando SPL.
Las SPL son librerias de PHP compuestas de algunas interfaces y clases, para resolver algunos problemas como el que tenemos en este caso.
Para este caso yo voy a usar ArrayIterator que convierte mi objeto ( DTO ), y lo convierte en iterable. Ademas me va a proporcionar de un metodo vital en este proceso.
Ahora voy a extender mi DTO de ArrayIterator. Y ademas voy a agrgar un hack en el __construct, para que cuando reciba un array, solo guarde los valores que existen como propiedad dentro de mi DTO. La clase quedaria asi.
class Application_Model_Mail_VO extends ArrayIterator
{
public $from;
public $to;
public $cc;
public $bcc;
public $subject;
public $replyTo;
public $htmlBody;
public $textBody;
public $templateParams;
public $htmlTemplate;
public $textTemplate;
public function __construct( $array )
{
foreach($array as $key=> $value ) {
if(property_exists('Application_Model_Mail_VO' , $key )) {
$this->{$key} = $value;
}
}
}
}
Una vez agregado esto, ahora vamos a ver como quedaria nuestro metodo queue con esta modificacion.
...
public function enqueue($data)
{
$data = Zend_Json::decode($data);
$vo = new Application_Model_Mail_DTO( $data );
$model = new Application_Model_Mail();
$model->save( $dto );
}
Se daran cuenta que quedo mucho mas simplificado el codigo y mientras mas simple mas facil de leer.
Ahora como quedaria nuestro modelo, que recibe este DTO y lo guarda, en mi ejemplo yo uso MongoDb para no tener que mostrarle el schemea de la Base de Datos, y los metodos inserts de MySql.
class Application_Model_Mails
{
private $_collection;
// Insancio la clase Mongo que contiene la conexion, y le digo cual es la coleccion donde voy a guardar los datos.
public function __construct()
{
$db = new Mongo();
$this->_collection = $db->mailer->spooler;
}
public function save( Application_Model_Mail_DTO $properties )
{
return $this->_collection->insert( $properties->getArrayCopy() );
}
}
Como se ve en el ejemplo, validamos que el parametro que recibe save(), sea una instancia de Application_Model_Mail_DTO, si esto es asi vamos a insertar los parametros que devuelve el metodo getArrayCopy(), que es parte de ArrayIterator, el cual devuelve un array con las propiedades de nuestro Application_Model_Mail_DTO.
Un paso previo, y que no contemple en este ejemplo es validar que los datos que se reciben esten completos y sean validos, tengan en cuenta siempre validar y filtrar los datos que se reciben.
September 16th, 2011 Category: Curso php5 Programacion Zend Framework
55 Comments »
Con este video concluye la serie inicial de videos. Hoy vamos a ver como Editar, Borrar, y Paginar nuestros datos.
Vamos a ver como manipular un row facilmente, para borrarlo y editarlo. Vamos a usar Zend_Paginator para paginar resultados facilmente con Zend Framework.
Con estos 5 videos ustedes deberian ser capaces de empezar a trabajar con Zend Framework, hay mucho para aprender no se desmoralicen si se traban con algo, nos pasa a todos y todos los dias.
Ahora les dejo para que vean, recuerden verlo en HD.
No se olviden de twitearlo/plusearlo/Facebookearlo
Si tienen dudas comenten, estoy archivando toda las dudas que surgen en los comentarios para despues crear mas video a partir de esas inquietudes.
Capitulos Anteriores
Capitulo 1 < Configuracion y creacion del proyecto
Capitulo 2 < Estructura de directorios, MVC y layouts
Capitulo 3 < Objeto view, y contenido estatico
Capitulo 4 < Modelos y Formularios
September 12th, 2011 Category: Curso php5 Programacion Zend Framework
23 Comments »
Llego la hora de hacer algo util, hoy vamos a ver como configurar nuestra aplicacion para trabajar con una base de datos mysql, para eso vamos a usar Zend_Form para crear formularios y vamos a crear modelos para poder traer datos de nuestras tablas y poder escribir en ellas.
Si te perdiste el video anterior podes verlo aca
Es recomendable ver el video en 720p de resolucion y en pantalla completa.
Los que quieran descargarse el codigo fuente pueden hacerlo desde github en http://github.com/pablofmorales/News123
Capitulos Anteriores
Capitulo 1 < Configuracion y creacion del proyecto
Capitulo 2 < Estructura de directorios, MVC y layouts
Capitulo 3 < Objeto view, y contenido estatico
Proximo capitulo > Edicion, y Paginado.
Gracias Maestrosdelweb por darme un espacio en su cuenta de youtube
August 31st, 2011 Category: php5 Programacion Zend Framework
No Comments »
Muchas veces necesitamos guardar una fecha en mysql, y recibimos una fecha con el formato dd/mm/yyyy, pero en Mysql es necesario guardarlo con el formato yyyy-mm-dd.
Esto no supone ningun inconveniente con Zend Framework, la verdad es que es bastante simple.
Lo primero que hacemos es recibir la fecha como viene, y crear una instancia de Zend_Date
$fechaInicial = "25/08/2016";
$fecha = new Zend_Date($fechaInicial, 'dd/mm/yyyy');
echo $fecha->get('yyyy-mm-dd');
Con el metodo get y pasando como parametro, el formato que necesitamos es todo lo que necesitamos para guardar ese valor con un formato de fecha valido en nuestra base de datos.
August 31st, 2011 Category: php5 Programacion
No Comments »
Hasta ahora no necesite implementar funciones anonimas en ningun proyecto, pero estaba trabajando con archivos de texto, donde tenia que parsear el contenido y me encontre que el array que generaba con cada columna de una linea de archivo, venia con espacios al inicio y me complicaba las validaciones, asi que tenia que usar la funcion trim(), en cada elemento. Para hacerlo facil queria usar array_walk(), el problema es que no podia usar trim(), como nombre de funcion.
Asi que decidi usar closures, condenando el proyecto a solo correr en php 5.3, pero eso no iba a ser un problema (creo).
Para lo que no sepan lo que es un clousure, pueden leerlo en la pagina de PHP
El codigo es bastante simple y lo comparto a continuacion.
array_walk($prop, function(&$n) {
$n = trim($n);
});
Como ven en el ejemplo la forma de implementarlo es realmente muy simple, tal como lo hacemos en javascripts.
Es importante que no abusen de estas funciones anonimas, porque pueden traer confusion cuando el sistema crezca un poco, pero es interesante aplicarlo en estos casos que son bastante simples, y necesarios.
Soy conciente de que tendria que tener listo el capitulo 4 del curso de Zend Framework, en un rato lo subo, a no desesperarce.
August 15th, 2011 Category: Curso php5 Programacion Zend Zend Framework
16 Comments »
En este capitulo vemos como pasar datos desde un controller hacia la vista, o el layout. Tambien agregamos archivos estaticos al proyecto, css, js, e imagenes.
Si te perdiste el video anterior podes verlo aca
Es recomendable ver el video en 720p/1080p de resolucion y en pantalla completa.
Los que quieran descargarse el codigo fuente pueden hacerlo desde github en http://github.com/pablofmorales/News123
Capitulo 1 < Configuracion y creacion del proyecto
Capitulo 2 < Estructura de directorios, MVC y layouts
Proximo capitulo > Base de datos y Modelos
July 27th, 2011 Category: Curso php5 Programacion Zend Zend Framework
28 Comments »
Ya esta el capitulo dos del video tutorial de Zend Framework, en esta edicion vamos a dar un repaso sobre la estructura de direcotrios de Zend Framework, editar los controllers, las vistas, y el layout de nuestra aplicacion.
Tambien vamos a empezar a darle forma a nuestro proyecto. Y entender la diferencia entre el contenido estatico y el contenido generado por nuestro MVC.
Espero que lo disfruten, pueden usar los comments de este blog para plantear dudas, pedir que se refuerce algun tema, o pedir temas a tocar en el futuro.
Si te perdiste el video anterior podes verlo aca
Es recomendable ver el video en 720p de resolucion y en pantalla completa.
Los que quieran descargarse el codigo fuente pueden hacerlo desde github en http://github.com/pablofmorales/News123
Capitulo Anterior < Configuracion y creacion del proyecto
Proximo capitulo > Enviar parametros a las vistas y agregar archivos js y css a nuestro proyecto.
July 18th, 2011 Category: Curso php5 Programacion Zend Framework
26 Comments »
Este es el primero de una serie de screencast donde la idea es mostrar como crear un proyecto con Zend Framework.
Vamos a crear un portal de noticias que llamaremos “news123″ a medida que pasen las clases vamos a darle forma al proyecto.
En el primer capitulo vamos a configurar nuestro proyecto desde 0. Esto incluye el startup del proyecto y la configuracion en netbeans, y en Apapche para que corra dentro de un virtualhost dentro de un servidor local.
Recomiendo ver el video en pantalla completa y en la resolucion 720p para poder ver con claridad el tutorial.
Los que quieran descargarse el codigo fuente pueden hacerlo desde github en http://github.com/pablofmorales/News123
Proximo capitulo >
May 20th, 2011 Category: php5 Programacion
6 Comments »
Y si gente si yo pude cualquier mortal puede. La verdad es que no fue nada dificil, lei el libro una vez, y despues repase algunos capitulos la noche anterior, y salio bastante bien.
Creo que las partes mas importantes para repasar y que por ahi no se usa mucho es el trabajo con socket, y XML, ya que le da mucha relevancia al trabajo con DOM.
Lo unico malo que me paso es que la licencia la compre hace unos 11 meses atras, y cuando fui a rendir en vez de tomarme la version 5.2 me tomaron la 5.3, y no hubo problema con las LAMDA ni con Namespaces, el problema vino con las SPL, ya que en la version anterior solo tenia algunas SPL, ahora habia un monton, y me preguntaron justo la que nunca habia usado
.
Pero quiero animarlos a todos para que intenten sacar la certificacion, en Argentina solo somos 19 los certificados y no estaria mal que ese numero aumentara un poco.
En Argentina el examen se puede rendir en muchos lugares, yo elegi Educacion It por ser ex profesor del instituto, pero hay muchos lugares para elegir.
Aca les dejo mi link
June 16th, 2010 Category: linux php5
No Comments »
Una de las novedades con Ubuntu Lucid es que venia con PHP 5.3, para mi iba todo muy bien, hasta que empeze a trabajar con Magento enterprise edition, el cual requiere la libreria ioncube (http://www.ioncube.com/). Lo primero que hice fue tratar de instalar en la libreria en mi php 5.3, despues de buscar un poco me encontre con el primer problema, Ioncube aun no tiene soporte para php 5.3.
Como si o si necesitaba instalar esta libreria busque la forma de pasar a PHP 5.2, lamentablemente no estan facil como se supone que deberia ser. Lo mas llamativo es que no existe dentro del repo de Lucid la version 5.2.x, solo nos deja instalar php 5.3, esto me resulto raro ya que esta version todavia no esta demasiado fomentada en los servidores web. Me paso en otras distro que con algun problema con por ejemplo mysql, donde la version default de mysql era mysql-server-5.1 en el repo igual contaba con la version mysql-server-5.0.
Para instalar PHP 5.2 en Lucid, hay que borrar todo lo relacionado a PHP 5.3 en nuestro sistema, y despues cambiar los repos para que busque en el de Karmic que es la version anterior, y si tiene php 5.2 en los repos.
Segui paso a paso esta post para tener php5.2 en Lucid
http://mrkandy.wordpress.com/2010/04/16/install-php-5-2-x-in-ubuntu-10-04-lucid/
El problema es que hay que acordarse que cada vez que queramos instalar algo relacionado con PHP hay que hacerlo asi.
$ sudo aptitude install -t karmic nombrPaquete
Es molesto pero por ahora la unica solucion.
Despues de hacer esto, instale el ioncube, y todo perfecto.
Instale las librerias gd, mysql, curl.
Cuando quise instalar mcrypt, otra libreria muy necesaria, empezo mi segundo problema y el mas molesto. Por alguna razon, esto es probable que yo haya hecho algo mal, cuando queria instalar mcrypt, el apt-get me daba una advertencia, diciendo que para instalar el paquete tenia que hacer un upgrade a la version 5.3, ninguna de las opciones de instalacion me permitian mantenerme en 5.2.
Un companero de proyecto, Gonzalo, me recomendo bajarme la lib de 64 bit desde el repo de debian http://packages.debian.org/lenny/php5-mcrypt, podria haber usado
#dpkg -i paquete –force all, pero esto podria traer problemas con mi distro, asi que descomprimi el .deb, e instale la lib a mano. Copiando el .so en /usr/lib/php5/2006…/ y creando el mcrypt.ini en /etc/php5/conf.d
Cuando reinicie el apache encontre mi tercer y ultimo problema. Mcrypt tiene una dependencia, que es libltdl, busque en aptitude y lo que habia ya estaba instalado, y como ya habia pasado un rato en esto, hice la facil, me baje desde debian lenny la libreria http://packages.debian.org/lenny/libltdl3 y la instale con dpkg.
Ahora anda todo perfecto. Ubuntu Lucid con Php 5.2 con Ioncube corriendo a la perfeccion Magento Enterprise.



