【问题标题】:Symfony 2 How do I embed collection form using some criteriasSymfony 2 如何使用某些标准嵌入集合表单
【发布时间】:2012-05-12 17:49:09
【问题描述】:

我在使用嵌入集合表单时遇到问题,因为我想过滤给定集合中显示的数据。即

<?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 ...
}

然后我使用以下方法构建表单:

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());

我的问题是当我想通过 $attribute1 和/或 Child 模型类的 $attribute2 过滤集合时。

有没有办法按此集合表单的条件进行过滤?

【问题讨论】:

  • 通常你会在加载 $parent 时使用查询并只加载你想要的孩子。 $parent = $repo->load($id,$params);与其说是形式问题,不如说是模型问题。
  • 但是在模型中我没有问题,问题是当我想像Collection Type Form一样使用它时。

标签: forms collections symfony embed


【解决方案1】:

似乎我必须在使用 CreateQuery 之前过滤对象,然后使用这个过滤的对象创建表单。 像这样:

$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());           

【讨论】:

    【解决方案2】:

    我指出你正确的方向(我希望):

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

    本文处理字段依赖关系。例如,当您选择一个国家/地区时,列表中会显示属于该国家/地区的城镇。

    好像是你的问题

    【讨论】:

    • 没错!该示例对解决我的问题很有用,但是,我想在“收集”类型的表单上使用它。
    • 谢谢,这个例子会很有用
    • 当我尝试访问 aulatic.16mb.com/wordpress/2011/08/… 时,出现 403 Forbidden 错误。我真的很想看到这个例子,因为我有同样的功能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多