Búscalo aquí:

Setear un valor heredado desde Symfony

Cuando se trabaja con Base de Datos, la propiedad de generalización es comunmente usado puesto que, somos conscientes que al momento de programar, podremos trabajar esto mediante herencia, y más aún si trabajamos con algún ORM que nos permita el trabajo desde programación orientada a objetos encapsulándonos el trabajo sobre los campos de las tablas de una base de datos. Pero, como hacemos que un objeto herede una clave desde su padre (siendo esta la única clave de la clase hijo) de manera automática cuando trabajamaos desde Symfony?.

El caso descrito, se puede observar en la relación mostrada en la imagen superior: id_persona_empresa es padre de fid_trabajador, y esta tabla hija, hereda la clave fid_persona_empresa_id, que a su vez, es su clave única. Al trabajar en el framework Symfony, ocurría que, al crear el módulo de esta clase hija, al momento de intentar crear un nuevo elemento trabajador, en mi formulario de vista aparecían únicamente los siguientes campos:

Como podrán notar, hace falta la clave primaria fid_persona_empresa_id, la cual no se puede asignar automáticamente (pues ocurrirá una excepción ya que el ORM no sabrá que valor asignar a dicha clave). Esta clave debe ser colocada manualemnte (y es natural puesto que la idea es asignar un determinado rol de trabajador a una persona/empresa previamente creada). Si damos un vistazo a la clase BaseFidTrabajadorForm en los formularios, observaremos:
  1. public function setup()
  2. {
  3. $this->setWidgets(array(
  4. 'fid_persona_empresa_id' = > new sfWidgetFormInputHidden(),
  5. 'fid_rol_trabajador_id' => new sfWidgetFormPropelChoice(array('model' =>
  6. 'FidRolTrabajador', 'add_empty' => true)),
  7. 'foto' => new sfWidgetFormInput(),
  8. 'fechaIngreso' => new sfWidgetFormDateTime(),
  9. ));

El parámetro que corresponde a la clave primaria fid_persona_empresa_id se encuentra oculta, entonces deberemos de quitar esa linea y sustituirla por:

  1. 'fid_persona_empresa_id' => new sfWidgetFormPropelChoice(array('model'
  2. => 'FidPersonaEmpresa', 'add_empty' => true)),
Pero eso no es todo, con esto solamente lograremos visualizar en nuestro formulario de vista del módulo trabajador, la clave que necesitamos, pero ahora nos hace falta leer el valor que se leerá y setearlo (asignarlo) como corresponda, para eso, en el formulario trabajador, es decir, en la clase FidTrabajadorForm agregamos lo siguiente:

  1. public function configure()
  2. {
  3. //obtengo el request del contexto
  4. $request = sfContext::getInstance()-> getRequest();
  5. // y lo seteo
  6. $this-> getObject()-> setPrimaryKey($request->getParameter
  7. ('fid_persona_empresa_id'));
  8. }

Con eso, todo esta listo, ahora probamos y vemos los resultados:


Y listo!! saludos



Fuente: juaninf's Blog


Quieres leer más post como éste???...suscribete aquí!!!

No hay comentarios.:

Publicar un comentario

Bienvenido a jcGeorge's Blog!!!

Por favor deja tu comentario, consulta o sugerencia, procura mantener habilitado tu perfil de Blogger o deja un enlace a tu blog o web.

Gracias por leer este blog!!!

Related Posts Plugin for WordPress, Blogger...