Extendiendo el sfActions de symfony 1/3

Introducción al sfActions

Como habrán notado cuando trabajamos dentro de un módulo tenemos que crear los templates y los actions. Cada action creado debe extender de una clase propia del framework llamado sfActions que se encuentra dentro de la carpeta lib/action/ de los fuentes de symfony. Ésta a su vez hereda de otra y van las extensiones para arriba. Esto nos da la posibilidad de heredar código para todos nuestros actions.

La idea de éste posts es crear nuestras propias funcionalidades para no estar escribiendo muchas veces la misma cosa dentro de nuestros actions y vamos a ir haciendolo de a poco de acuerdo a las necesidades que vaya teniendo dentro de mis proyectos.

Para hacer esto lo que hago es crear dentro de la carpeta lib de mi proyecto un archivo BaseActions de la siguiente manera.

class BaseActions extends sfActions
{
}

Hacemos que nuestra clase BaseActions extienda de sfActions para que podamos seguir utilizando las funcionalidades que siempre usabamos y ahora cada vez que creamos un nuevo action lo hacemos de la siguiente manera.

class testActions extends BaseActions
{
}

De esta forma, podemos ir creando métodos genéricos dentro de BaseActions y no tener que escribirlos siempre por cada action específico. Lo único que debemos tener en cuenta es que los actions deben heredar de nuestra nueva clase.

Vamos a un ejemplo sencillo, para mostrar la idea.

Para enviar un texto al log podemos usar el método $this->logMessage(‘mensaje’, ‘debug’); que recibe como primer parámetro el texto a imprimir y como segundo parámetro opcional el nivel del log (por defecto es info). Si analizamos esto podemos darnos cuenta que éste método sigue la misma temática que nuestra idea aquí ya que como les comentaba, BaseActions hereda de sfActions que a su vez lo hace de sfAction y ésta última clase lo hace de sfComponent la cual finalmente contiene el método.

Este método nos sirve para imprimir el texto pasado como primer parámetro al archivo de log pero en el caso de que yo quiera imprimir el contenido de un array para un debug específico como sabemos cuando se hace un echo de un array lo impreso será literalmente la palabra “Array” por lo que tendríamos que llamar al método de la siguiente forma:

$array = array('foo', 'bar', 'baz');
$this->logMessage(print_r($array, true), 'debug');

Como la idea de hacer esto es generalmente para usarlo a modo DEBUG entonces podríamos crear un método en BaseActions de la siguiente forma a fin de escribir menos cada vez que necesitemos esta funcionalidad.

class BaseActions extends sfActions
{
    protected function debugr($array)
    {
        $this->logMessage(print_r($array, true), 'debug');
    }
}

Ahora, cada vez que necesitemos hacer un debug de un array lo único que tenemos que hacer es simplemente, desde nuestro action, llamar al método nuevo de esta forma:

$array = array('foo', 'bar', 'baz');
$this->debugr($array);

Por supuesto este ejemplo, aunque simple, resulta muy útil para mí, y la idea con los siguientes posts será ir agregando funcionalidades a nuestra clase BaseActions a fin de ir haciendo más código genérico.

Si tienen alguna idea de hacer alguna funcionalidad genérica espero sus comentarios y lo desarrollamos.

Puedes ver el siguiente artículo sobre esta serie aquí.

2 comentarios en “Extendiendo el sfActions de symfony 1/3”

  1. Saludos, en realidad me sorprende symfony es muy interesante, estoy siguiendo un tutorial que es Jobeet en algunas cosas me estanco pero es bueno que publiquen sobre este framework que ayuda mucho.

Comenta este artículo