Los formularios de Symfony 1.4

8.3. Internacionalización de los objetos Propel

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

Formulario Propel internacionalizado

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.