Symfony 2 ¿Cómo incrusto un formulario de colección usando algunos criterios?

Tengo un problema al usar los formularios de recopilación incrustados porque quiero filtrar los datos que se muestran en la recopilación proporcionada. es decir

<?php
Class Parent
{
    ... some attributes ...

    /**
     * @ORM\OneToMany(targetEntity="Child", mappedBy="parent", cascade={"all"})
     */
     private $children;

    ... some setters & getters ...

}

Class Child
{
    private $attribute1;

    private $attribute2;

    /**
     * @ORM\ManyToOne(targetEntity="Parent", inversedBy="children")
     * @ORM\JoinColumn(name="parent_id", referencedColumnName="id")
     */
     private $parent;

     ... some setters & getters ...
}

Luego construyo el formulario usando:

class ParentChildType extends AbstractType
{
    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder
        ->add('children', 'collection', array(
            'type' => ChildrenType(),
            'allow_add' => true,
        ));
    }
}
...
On controller:

    $parent = $this->getDoctrine()->getEntityManager()->getRepository('AcmeBundle:Parent')->find( $id );
    $forms = $this->createForm( new ParentChildType(), $parent)->createView();

    and then..

    return array('forms' => $forms->crateView());

Mi problema es cuando quiero filtrar la colección por $attribute1 y/o $attribute2 of Child clase modelo.

¿Hay alguna forma de filtrar por un criterio para estos formularios de recopilación?

preguntado el 03 de mayo de 12 a las 09:05

Normalmente, usaría una consulta al cargar $parent y cargar solo los elementos secundarios que desee. $padre = $repo->load($id,$params); Más un problema de modelo que un problema de forma. -

Pero en el modelo no tengo el problema, el problema es cuando lo quiero usar como Formulario Tipo Cobro. -

2 Respuestas

Parece que tengo que filtrar el objeto antes de usar CreateQuery y luego crear el formulario usando este objeto filtrado. Como esto:

$parent = $this->getDoctrine()->getEntityManager()->createQuery("
            SELECT p, c 
            FROM AcmeBundle:Parent p
            JOIN p.children c
            WHERE c.attribute1 = :attr1
              AND c.attribute2 = :attr2
           ")
           ->setParameter('attr1', <some_value>)
           ->setParameter('attr2', <some_value>)
           ->getOneOrNullResult();
$forms = $this->createForm( new ParentChildType(), $parent)->createView();
....
return array('forms' => $form->createView());           

contestado el 04 de mayo de 12 a las 03:05

Te señalo la dirección correcta (espero):

http://www.craftitonline.com/2011/08/symfony2-ajax-form-republish/

Este artículo trata sobre las dependencias de campo. por ejemplo, cuando seleccionas un país, tienes las localidades que pertenecen al país que aparece en la lista.

Parece que se parece a su problema

contestado el 03 de mayo de 12 a las 12:05

¡Exactamente! Ese ejemplo puede ser útil para resolver mi problema, sin embargo, quiero usarlo en un formulario de tipo "colección". - alvaroveliz

Gracias, ese ejemplo será muy útil. alvaroveliz

Cuando traté de acceder aulatic.16mb.com/wordpress/2011/08/…, hubo un error 403 Prohibido. Realmente estoy ansioso por ver el ejemplo porque tengo la misma funcionalidad. - Floricel

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.