mergeForms en Symfony

Hola a todos, este es mi primer post, y como había dicho tomaré tópicos de symfony de los cuales a veces se encuentra bastante información y otros con los que a veces te quedas con dudas. Soy novel en symfony y la idea es compartir el código que me ha dado algo en qué pensar, para que otros también encuentren algún tipo de respuesta.

Lo primero que veremos será el fusionar dos formularios, entre el mergeForm y el embedForm pienso que es más fácil el primero, y creo (si no me equivoco) es mucho mejor para relaciones 1:1, el embedForm es más útil en relaciones 1:n y n:m.

Por cierto, el código que verán está algo difundido por la red, a excepción que yo necesitaba fusionar 3 formularios y no escribiría 3 métodos update, uno para cada objectForm, así que esa es la única particularidad.

http://pastebin.com/embed_iframe.php?i=De5HkzwZ


public function configure()
{
// fusionamos el formulario de contactos
$this->mergeForm(new ContactoForm(ContactoPeer::retrieveByPK($this->getObject()->getId())));
}

/**
* Actualizamos los formularios agregado
* en caso de tener varios mergeForm
* @param string $subform Nombre de la clase form, ejem. ContactoForm = Contacto
*/
protected function updateSubform($subform)
{
if(!is_null($objectSubform = $this->getObjectSubform($subform)))
{
$values = $this->getValues();

if($objectSubform->isNew())
{
$values[‘id’] = $this->object->getId();
}
$objectSubform->fromArray($values,BasePeer::TYPE_FIELDNAME);
$objectSubform->save();
}
}

/**
* Retorna el objeto FichaAsociado, si no existe crea uno
* @return objeto propel
*/
protected function getObjectSubform($subform)
{
$getSubform = ‘get’.$subform;

if(!$this->object->$getSubform())
{
return new $subform();
}
return $this->object->$getSubform();
}

/**
* Reescribimos el método save
*/
public function save($con = null)
{
parent::save();

$this->updateSubform(‘Contacto’);

return $this->object;
}

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s