Los comportamientos en Symfony es una funcionalidad muy interesante que nos puede ayudar a simplificar y reutilizar nuestro código. Cuando por ejemplo tenemos que escribir dos veces el mismo método para varias clases del modelo, es la situación ideal para utilizar los behaviors. Los behaviors ofrecen una forma simple de extender varias clases del modelo de la misma forma, ya sea alterando métodos existentes o añadiendo nuevos. Permite simular herencia múltiple en PHP, como sabéis en PHP no existe la herencia múltiple, pero en Symfony, los behaviors nos proporciona un mecanismo que nos permite tener herencia múltiple.
¿Como funcionan los behaviors en Symfony?
Los behaviors pueden utilizar de dos formas diferentes:
- Se pueden añadir “ganchos al modelo”. Esto consiste ejecutar un método de otra clase cuando ocurre un evento, por ejemplo antes de salvar los datos de un objeto del modelo. Estos son los ganchos que proporciona Symfony:
// Ganchos añadidos a la clase base de objeto
[nombreClase]:delete:pre // antes de la eliminación
[nombreClase]:delete:post // después de la eliminación
[nombreClase]:save:pre // antes de salvar
[nombreClase]:save:post // después de salvar
[nombreClase]:[nombreMetodo] // dentro de __call() (permite nuevos métodos)
// Ganchos añadidos a la clase base Peer
[NombreClasePeer]:doSelectRS:doSelectRS
[NombreClasePeer]:doSelectJoin:doSelectJoin
[NombreClasePeer]:doSelectJoinAll:doSelectJoinAll
[NombreClasePeer]:doSelectJoinAllExcept:doSelectJoinAllExcept
[NombreClasePeer]:doUpdate:pre
[NombreClasePeer]:doUpdate:post
[NombreClasePeer]:doInsert:pre
[NombreClasePeer]:doInsert:post - Se pueden añadir nuevos métodos. Este es un gancho especial que se debe tratar de forma especial, que hace posible la adición de nuevos métodos en tiempo de ejecución.
Symfony dispone una clase utilitaria, llamada sfPropelBehavior, la cual nos permite trabajar con los comportamientos de forma sencilla.
Lo primero para utilizar un comportamiento en Symfony es declarar dicho comportamiento
- // en config/config.php
- ));
Después hay que registrar el comportamiento en todas las clases del modelo que lo vayan a utilizar. Estas declaraciones se colocan al final del fichero que contiene la clase del modelo a la que se le quiere añadir el comportamiento.
- // en lib/model/Noticias.php
- // en lib/model/Enlaces.php
El primer parametro del metodo sfPropelBehavior::add en el nombre de la clase del modelo al que añadimos el comportamiento y el segundo es un array con en nombre del gancho que se ha declarado.
Para que todo esto funcione tenemos que declarar la clase que se llama desde el gancho. La clase MediaBehavior
- class MediaBehavior {
- public function preSave($object, $con = null)
- {
- $object->setTitulo("ESTO ES UN PRUEBA DE UN BEHAVIOR");
- }
- }
En conclusión este comportamiento lo que hace es modificar el valor del atributo titulo de las clases del modelo que lo utilizan.
Para terminar todo esto se podría incluir en un plugin para poder reutilizarlo en futuros proyectos. Para ello podríamos organizar el plugin de la siguiente forma:
plugins/
myPropelMediaBehaviorPlugin/
lib/
MediaBehavior.php // la clase que contiene los métodos para ser mezclados (*mixed in*)
config/
config.php // registrar los métodos del comportamiento
Como podéis ver la utilización de comportamientos en Symfony es muy sencilla. Además os recomiendo que antes de desarrollar un comportamiento desde cero, reviséis los que hay disponibles en los plugin oficiales de Symfony, ya que podeis encontraros con algo parecido a lo que esteis internando realizar.



Enviar un comentario nuevo