La forma más sencilla de aplicar esta configuración YAML a cada formulario consiste en cargarla en un array y después recorrer cada configuración:
public function enhance(sfForm $form)
{
$config = sfYaml::load(sfConfig::get('sf_config_dir').'/forms.yml');
foreach ($config as $class => $fieldConfigs)
{
if ($form instanceof $class)
{
foreach ($fieldConfigs as $fieldName => $fieldConfig)
{
if (isset($form[$fieldName]))
{
if (isset($fieldConfig['label']))
{
$form->getWidget($fieldName)->setLabel($fieldConfig['label']);
}
if (isset($fieldConfig['attributes']))
{
$form->getWidget($fieldName)->setAttributes(array_merge(
$form->getWidget($fieldName)->getAttributes(),
$fieldConfig['attributes']
));
}
if (isset($fieldConfig['errors']))
{
foreach ($fieldConfig['errors'] as $code => $msg)
{
$form->getValidator($fieldName)->setMessage($code, $msg);
}
}
}
}
}
}
}
Esta solución tiene varios problemas. En primer lugar, los archivos YAML se leen
desde el sistema de archivos y se cargan en un objeto de tipo sfYaml
cada vez
que se aplica la configuración a un formulario. Para mejorar el rendimiento de
la aplicación deberíamos evitar tantos accesos al sistema de archivos. En segundo
lugar, el rendimiento también se verá penalizado por la cantidad de bucles y
condiciones del código. La solución de estos dos problemas consiste en utilizar
la cache de configuración de Symfony.