Los formularios de Symfony incluyen el soporte de los objetos Propel internacionalizados. Para mostrar su funcionamiento se utiliza el siguiente modelo de datos de ejemplo con soporte de internacionalización:
propel:
articulo:
id:
autor: varchar(255)
created_at:
articulo_i18n:
titulo: varchar(255)
contenido: longvarchar
Utilizando los siguientes comandos se pueden generar las clases Propel y las clases del formulario:
$ php symfony build:model $ php symfony build:forms
Los comandos anteriores generan varios archivos en el proyecto de Symfony:
lib/ form/ ArticuloForm.class.php ArticuloI18nForm.class.php BaseFormPropel.class.php model/ Articulo.php ArticuloPeer.php ArticuloI18n.php ArticuloI18nPeer.php
El listado 8-8 muestra cómo configurar el formulario ArticuloForm
para poder editar en un mismo formulario las versiones en inglés y francés de un artículo.
Listado 8-8 - Formularios I18n de un objeto Propel internacionalizado
class ArticuloForm extends BaseArticuloForm
{
public function configure()
{
$this->embedI18n(array('en', 'fr'));
}
}
También es posible personalizar el nombre de los idiomas del formulario añadiendo en el método configure()
el código mostrado en el listado 8-9.
Listado 8-9 - Personalizando el nombre de los idiomas
$this->widgetSchema->setLabel('en', 'Inglés');
$this->widgetSchema->setLabel('fr', 'Francés');
Figura 8-1 - Formulario Propel internacionalizado
Y eso es todo. Cuando se ejecuta el método save()
del objeto del formulario, se guardan de forma automática el objeto Propel asociado y todos los objetos de tipo i18n.