válido para Symfony 1.3 y 1.4
El primer reto consiste en encontrar el evento de Symfony adecuado para aplicar
esta nueva configuración a cualquier variable que se pase a la plantilla. En este
caso se utiliza el evento template.filter_parameters, que se notifica justo
antes de mostrar una plantilla o un elemento parcial.
// lib/form/sfFormYamlEnhancer.class.php class sfFormYamlEnhancer { public function connect(sfEventDispatcher $dispatcher) { $dispatcher->connect('template.filter_parameters', array($this, 'filterParameters')); } public function filterParameters(sfEvent $event, $parameters) { foreach ($parameters as $name => $param) { if ($param instanceof sfForm && !$param->getOption('is_enhanced')) { $this->enhance($param); $param->setOption('is_enhanced', true); } } return $parameters; } public function enhance(sfForm $form) { // ... } }
Como puedes observar, el código anterior comprueba la existencia de una
opción llamada is_enhanced antes de aplicar la configuración a cada objeto
de formulario. De esta forma se evita aplicar dos veces la configuración a los
objetos que se pasan de una plantilla a un elemento parcial.
Esta clase encargada de mejorar los formularios debe conectarse a los eventos en la configuración de la aplicación:
// apps/frontend/config/frontendConfiguration.class.php class frontendConfiguration extends sfApplicationConfiguration { public function initialize() { $enhancer = new sfFormYamlEnhancer($this->getConfigCache()); $enhancer->connect($this->dispatcher); } }
Ahora ya podemos aislar los formularios justo antes de que se pasen a la plantilla o elemento parcial, por lo que tenemos todo listo para hacer funcionar la nueva configuración de formularios. El último paso consiste en aplicar lo que se ha configurado en el archivo YAML.
válido para Symfony 1.3 y 1.4