Posts Tagged ‘Symfony’

Embebed Forms en Symfony, una forma fácil

Thursday, June 3rd, 2010

Los formularios embebidos de symfony son una características muy buena del framework, el problema es que utilizarlos es bastante complicado y existe poca documentación oficial al respecto.

Toda esta duda me surgió debido a este video de Francois donde vi un nuevo método de Propel 1.5 para facilitar el proceso de embeber fomularios. El tema es que en varios proyectos que estoy llevando a cabo no tengo pensado migrar a nuevas versiones de symfony en un corto plazo, por eso quise facilitarme la vida implementando algo parecido. Vean el video para ver de lo que les hablo.

mergeRelation from Francois Zaninotto on Vimeo.

He trabajado un poco en el tema y realice una pequeña implementación para facilitar el trabajo parecida a la que se ve en el video, aquí la explicación.

El modelo

Todo parte de la suposición que tenemos una tabla 1 (tbl1) y otra tabla 2 (tbl2) que posee una relación con la primera, a travez del campo tbl1_id, deberemos respetar esta notación siempre para utilizar esta utilidad, la relación debe definirse a travez del campo tabla padre nombre seguido por _id, por ejemplo xxx_id.

Aquí un schema de ejemplo.

Generamos todo, modelo, forms, filters, sql

./symfony propel:build-all

Luego cargar las nuevas tablas a la base. Si no hay datos

./symfony propel:insert-sql

Modificaciones en las clases bases

Ahora, el siguiente paso es modificar la clase base de los forms para contar con los métodos reutilizables a fin de embeber formularios. Personalmente pienso que el mejor lugar es lib/forms/BaseFormPropel.class.php, si conocen un lugar mas apropiado para ubicarlos acepto la recomendación. Los métodos a añadir son tres.

loadAsEmbebedForm : Que añade la relación como un formulario embebido, se utilizará en el método configure de la clase Form del padre.

bindObjectToEmbebed : Al guardar, en caso de realizarse cambios, asocia el objeto padre a los objetos hijos de los formularios embebidos, se llama por bind.

is_seted_value : bindObjectToEmbebed lo utiliza para saber si se produjeron cambios en el formulario embebido.

bind : Redefinimos el metodo para llamar a bindObjectToEmbebed antes de realizar el bind de la clase base. El único que utilizaremos nosotros será loadAsEmbebedForm, los otros se invocarán automaticamente cuando corresponda. Debería quedarles algo así

El widget sfWidgetFormInputAjaxDelete

Luego será necesario que incorporen el widget sfWidgetFormInputAjaxDelete.class.php (lib/widget/) , este creará una entrada de texto con un boton X el cual al ser cliqueado invocará a la accion del modulo que especifiquen para borrar el elemento. Esta acciòn deberá ser implementada por ustedes en el modulo que les parezca.

Deberán tener instalado ysJQueryRevolutionsPlugin para que este widget funcione

http://www.symfony-project.org/plugins/ysJQueryRevolutionsPlugin

Configurar el Formulario Embebido

Con esto tenemos configurada nuestra instalación para embeber todos los formularios que querramos. Veamos como sería para embeber en Tbl1 el formulario Tbl2, lo único que deberemos hacer es configurar el form del modelo Tbl1 (tabla padre) para contener a Tbl2 (tabla hija). Para esto vamos a modificar el método configure utilizando el método recientemente añadido a la clase BaseFormPropel, loadAsEmbebedForm.

class Tbl1Form extends BaseTbl1Form {
public function configure() {
$this->loadAsEmbebedForm(’tbl2′, ‘thetext’, ‘demo/deleteTbl2′);
}
}

Aquí deberán pasar como argumentos al método el nombre del modelo hijo, el método para leer la propiedad que se utilizará como etiqueta del formulario embebido y la URI para la acción que borrará el formulario embebido.
Al terminar deberían probar con alguno módulo que utilice el form y les saldría una cosa parecida a esta.sshot-1

Eso es todo amigos, les parece sencillo ?

  • Share/Bookmark

Comenzar un proyecto Symfony 1.2 desde un Sandbox

Friday, March 19th, 2010

Esta es una pequeña guía de como encarar un proyecto nuevo con symfony 1.2 desde un sandbox, sobre un sistema Debian, con Apache 2, MySQL corriendo localmente y que utilizaremos como ORM Propel.

Por mas que symfony 1.2 esta viejo para el equipo de Symfony dado que ya no lo tienen para descargar en si lista de downloads, decidí realizar esta guía por que todavía hay gente que lo usa y no piensa migrarlo por el momento. Si estas por empezar desde cero, cero, cero y quieres saber symfony te recomiendo que veas instalar la versión 1.4, esta guía no debería diferenciarse en mucho para esa versión.

Para este ejemplo suponemos que el proyecto se llama mysandbox.com, reemplazar por el nombre que les parezca. Asumimos que será un entorno de prueba y obviamos las medidas de seguridad para hacer más sencillo el ejemplo.

Empezamos

1 – Descargar el Sandbox http://www.symfony-project.org/get/sf_sandbox_1_2.tgz

2 – Copiarlo descomprimido a un directorio para configurar el Vhost de Apache P.Ejemplo : /var/www/mysandbox.com

3 – Configurar el Vhost de Apache para nuestro proyecto, en el caso de debian añadir la siguiente definición de vhost en un archivo dentro de la carpeta /etc/apache2/sites-enabled.

<VirtualHost *:80>
ServerName mysandbox.com
DocumentRoot “/var/www/mysandbox.com/web”
DirectoryIndex index.php
<Directory “var/www/mysandbox.com/web”>
AllowOverride All
Allow from All
</Directory>
</VirtualHost>

Reemplazar los mysandbox.com por el nombre de su directorio y nombre de dominio.

4 – Añadir el nombre dominio de proyecto en su tabla de hosts. En caso de tener el DNS apuntando a su server para el Vhost saltear este paso. En caso de GNU/Linux la tabla de hosts se encuentra en /etc/hosts, deberán añadir una linea como la siguiente.

127.0.0.1  mysandobx.com

Reemplazar mysandbox.com por el nombre de su dominio, el que debe ser igual a la definición de la directiva ServerName en la definición del Vhost.

5 – Reiniciar Apache

/etc/init.d/apache2 reload

6 – Setear los permisos de los archivos del vhost adecuadamente, para salir rápido del paso (SOLO EN DESARROLLO!)

chmod 777 /var/www/plughelp.com -R

NOTA: Para una asignación de permisos segura en un entorno de producción les recomiendo que vean http://articles.slicehost.com/2007/9/18/apache-virtual-hosts-permissions.

En este paso debería tener el sandbox casi listo, si entra en su navegador a la direccion del dominio debería ver la pagina por defecto del proyecto.

http://mysandbox.com

7 – Levantar la base en mysql

#mysql -u root -p #Luego ingresar la password

mysql>create database mysandbox_com;

8 – Configurar el acceso del sandbox a mysql. Para esto debe modificarse el archivo databases.yml y propel.ini

Database.yml : Recuerden que el YML lleva una identación especifica, en esta pagina puede ser altera la identación por ende no copien y peguen esto por que seguramente no les va a funcionar adecuadamente. Verfiquen y cambien los valores del YML que viene por defecto.

dev:
propel:
param:
classname: DebugPDO
test:
propel:
param:
classname: DebugPDO
all:
propel:
class: sfPropelDatabase
param:
classname: PropelPDO
dsn: ‘mysql://host=127.0.0.1;dbname=mysandbox_com’
username: root
password: tupass
encoding: utf8
persistent: true
pooling: true

Propel.ini

propel.targetPackage       = lib.model
propel.packageObjectModel  = true
propel.project             = mysandbox.com
propel.database            = mysql
propel.database.driver     = mysql
propel.database.url        = mysql://dbname=mysandbox_com;host=127.0.0.1
propel.database.creole.url = ${propel.database.url}
propel.database.user       = root
propel.database.password   = tupass

; mysql options
propel.mysql.tableType     = InnoDB

propel.addVendorInfo       = true
propel.addGenericAccessors = true
propel.addGenericMutators  = true
propel.addTimeStamp        = true
propel.addValidators       = false

propel.useDateTimeClass       = true
propel.defaultTimeStampFormat = d-m-Y H:i:s
propel.defaultTimeFormat      = H:i:s
propel.defaultDateFormat      = d-m-Y

propel.schema.validate        = false
propel.samePhpName            = false
propel.disableIdentifierQuoting     = false
propel.emulateForeignKeyConstraints = true

; directories
propel.home                    = .
propel.output.dir              = /var/www/production/sfweb/www/cache/symfony-for-release/1.2.10/sf_sandbox
propel.schema.dir              = ${propel.output.dir}/config
propel.conf.dir                = ${propel.output.dir}/config
propel.phpconf.dir             = ${propel.output.dir}/config
propel.sql.dir                 = ${propel.output.dir}/data/sql
propel.runtime.conf.file       = runtime-conf.xml
propel.php.dir                 = ${propel.output.dir}
propel.default.schema.basename = schema
propel.datadump.mapper.from    = *schema.xml
propel.datadump.mapper.to      = *data.xml

; builder settings
propel.builder.peer.class              = plugins.sfPropelPlugin.lib.builder.SfPeerBuilder
propel.builder.object.class            = plugins.sfPropelPlugin.lib.builder.SfObjectBuilder
propel.builder.objectstub.class        = plugins.sfPropelPlugin.lib.builder.SfExtensionObjectBuilder
propel.builder.peerstub.class          = plugins.sfPropelPlugin.lib.builder.SfExtensionPeerBuilder
propel.builder.objectmultiextend.class = plugins.sfPropelPlugin.lib.builder.SfMultiExtendObjectBuilder
propel.builder.mapbuilder.class        = plugins.sfPropelPlugin.lib.builder.SfMapBuilderBuilder

propel.builder.addIncludes  = false
propel.builder.addComments  = true
propel.builder.addBehaviors = true

9 – Con eso deberías tener listo tu sandbox para comenzar a programar. El metacomando de symfony puede usarse desde el root del proyecto con ./symfony

10 – Como Seguir, algunas de las cosas a saber. Puedes seguir esta guía desde el capítulo 4 del libro para continuar aprendiendo

http://www.symfony-project.org/book/1_2/04-The-Basics-of-Page-Creation

Otra alternativa es ver esta pequeña introducción

http://www.symfony-project.org/tutorial/1_2/en/my-first-project

Cosas que deberías dominar

- Definir el esquema

- Generar

- build-model

- build-forms

- build-filters

- build-sql

- build-schema

- data-load

- insert-sql

- Crear Aplicaciones

- Crear Modulos

- Limpiar la cache ./symfony cc

A symfonear

Les dejo este post en texto plano por si quieren ver los ejemplos tal cual como son sin problemas de identación Descarga

  • Share/Bookmark

Soporte para Symfony

Sunday, March 14th, 2010

Mucha gente suele enviarme correos para que los ayude con sus desarrollos con Symfony, mirando mis readers de hoy me encontré con este sitio:

http://www.symfonyexperts.com

Un foro donde uno puedo hacer preguntas sobre symfony poniendo una ganancia por la pregunta realizada, una vez que se responda el que pregunta debe pagar por su respuesta y el que respondió la pregunta se llevará parte de la recompensa.

Los invito a todos a participar, a ver si así recupero algo de mi tiempo invertido en responder preguntas.

  • Share/Bookmark

Netbeans 6.8 esta en el Aire

Wednesday, December 16th, 2009

Para empezar mi día con algo nuevo me entero que ya esta disponible la versión 6.8 de la famosa IDE de Sun. La promesa de esta IDE para programadores PHP es la integración con el framework de Symfony, después de una larga espera a partir de hoy la podremos tener en nuestras manos.

Alguna de las novedades en el área de PHP son

- Mejoras en el Gestor de Proyecto

- Mejoras en el Editor, soporte para Espacios de Nombre (PHP 5.3) entre otros

- Mejoras respecto al Unit y Funcional Testing

- Integración con MySQL

- Nueva integración con Symfony

- Pueden ver otras novedades en su site

He probado las betas y la verdad que tiene muchísimas características que personalmente encuentro muy prácticas. Sin lugar a dudas el crecimiento diario de este entorno de desarrollo tan utilizado por miles de desarrolladores en todo el mundo es otro hito en el avance del open source, mis sinceras felicitaciones al equipo de desarrollo.

  • Share/Bookmark

Screencast – Soporte para Symfony en NB

Tuesday, November 3rd, 2009

Por todos lados habran leido que Netbeans traerá soporte para Netbeans en su próxima versión, bueno, la gente del equipo de desarrollo de NB realizó un screencast para demostrar su nueva Feature. Sin mas rodeos los dejos con lo prometido.

  • Share/Bookmark

Ponencia Juti 2009

Saturday, September 5th, 2009
Juti 2009

Juti 2009

A pedido de varios que asistieron a mi ponencia en la Juti 2009, les dejo para que descarguen las diapositivas de mi presentación de Symfony.

Espero que la charla alla sido de su agrado y puedan llegar a experimentar con esta excelente herramienta que cada día me sorprende mas.

Enlace de Descarga : Diapositivas de la charla en la Juti 2009

  • Share/Bookmark