Embeber n formularios de symfony dinámicamente

39 views
Skip to first unread message

sinfonico

unread,
Feb 10, 2012, 12:49:25 PM2/10/12
to symfo...@googlegroups.com
Saludos al grupo.

Estoy desarrollando una versión parecida al proyecto Jobeet, es decir un sitio web de una bolsa de trabajo, en el cual sea posible que los candidatos que deseen aplicar a una oferta de trabajo profesional sean capaces de especificar varias carreras profesionales en su perfil. Quisiera saber como crear un formulario para añadir un candidato a la base de datos y las distintas carreras que éste desea añadir a su perfil, pero que él pueda especificar el número de carreras que desea agregar, en lugar de un número predefinido de carreras específicado en la función configure() del formulario del Candidato.

La relación entre los Candidatos y sus Carreras, es de muchos a muchos por medio de una tabla de relación llamada CarreraCandidato, la tabla de ralación CarreraCandidato tiene su propio formulario de symfony y puede ser embebido en el formulario de Candidato n veces, por ejemplo embeber 3 formularios de CarreraCandidato en el formulario Candidato para que éste pueda agregar tres carreras profesionales que haya cursado. Lo ideal sería que en el formulario de candidatos se puedan agregar n fomularios de CarreraCandidato cuando ya se ha visualizado el formulario.

El modelo de la base de datos es el siguiente:

Candidato:
  columns:
    candidato_id:
      type: integer
      primary: true
      notnull: true
      autoincrement: true
    dni:
      type: string(10)
      notnull: true
    nombres:
      type: string(50)
      notnull: true
    apellidos:
      type: string(50)
      notnull: true
    direccion:
      type: string(100)
      notnull: true
    telefono:
      type: string(20)
      notnull: true
    celular:
      type: string(20)
      notnull: true
    fecha_nacimiento:
      type: timestamp
      notnull: true
Carrera:
  columns:
    carrera_id:
      type: integer
      primary: true
      autoincrement: true
    descripcion:
      type: string(100)
      notnull: true
CarreraCandidato:
  tableName: obt_carrera_candidato
  columns:
    candidato_id:
      type: integer
      primary: true
    carrera_id:
      type: integer
      primary: true
    anio_en_curso:
      type: integer
      notnull: true
    promedio:
      type: float
      default: null
  relations:
    candidato:
      class: Candidato
      local: candidato_id
      foreign: candidato_id
      foreignAlias: CarrerasCandidatos
    carrera:
      class: Carrera
      local: carrera_id
      foreign: carrera_id
      foreignAlias: CarrerasCandidatos

He creado varios formularios de CarreraCandidato embebidos dentro del formulario de un Candidato, pero lo que deseo es que mientras el usuario este viendo el formulario pueda agregar más carreras, es decir que se agregen más formularios embebidos de CarreraCandidato en el formulario de Candidato.

El código para poder agregar los formularios embebidos de CarreraCandidato al formulario de Candidato es el siguiente y se encuentra en la función configure() del CandidatoForm:

class CandidatoForm extends BaseObtCandidatoForm {

    public function configure() {
        $subForm = new sfForm();
        for ($i = 1; $i <=3; $i++) {
            $carreraCandidato = new ObtCarreraCandidato();
            $carreraCandidato->candidato = $this->getObject();
            $form = new ObtCarreraCandidatoForm($carreraCandidato);
            $subForm->embedForm($i, $form);
        }
        $this->embedForm('carrerasCandidato', $subForm);
    }
}


En el actions.php se ejecuta el siguiente código:

public function execute RegistroCandidato(sfWebRequest $request){
    $candidato = Doctrine_Core::getTable(''Candidato)->find($request->getParameter('id'));
    $this->form = new ObtCandidatoForm(candidato);
}

En el template que muestra el formulario de Candidato y formulario embebido con CarrerasCandidatos sólo se manda a mostrar dichos formularios:

<?php echo $form?>
<?php echo $form->getEmbeddedForm('carrerasCandidato'); ?>

Este código genera tres formularios embebidos de CarreraCandidato en el formulario Candidato y es posible para el usuario especificar tres distintas carreras y guardar la información de su perfil con sus carreras correspondientes sin ningún problema. Pero lo deseado sería que el usuario pudiera, tal vez con un input en la página web que se le muestra agregar más formularios embebidos de carreras, de forma similar como se hace en la función configure() y que se muestren n formularios embebidos que ha especificado el usuario.

Gracias de antebrazo por vuestra ayuda :)
(mirad que me he esmerado poniéndole colorcitos al código)
Reply all
Reply to author
Forward
0 new messages