繁体   English   中英

如何在Symfony2中过滤表单集合?

[英]How would one filter a form collection in Symfony2?

我正在将旧的应用程序重写为Symfony2,但有点卡住了。 该应用程序具有TaskTypeTagsType TaskType形式具有集合TagType 某些标签可能已存档(即Tag#archived=true )。 在这种情况下,当您尝试编辑任务时,不应在表单中显示已归档的标记。

class TaskType extends AbstractType
{
    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('title')
            ->add(
                'tags',
                'collection',
                array(
                    'type'         => new TagType(),
                    'allow_add'    => true,
                    'allow_delete' => true,
                    'by_reference' => false,
               )
            )
        ;
    }

    // ...
}


class TagType extends AbstractType
{
    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('name')
        ;
    }

    // ...
}

entity而不是collection时,有没有办法类似于使用query_builder来过滤标签? 是否有任何解决方法?

如果整个系统都将显示给用户的标签存档,则您可能需要使用全局过滤器,因为它类似于“可删除”的行为。

您可以在这里查看代码

https://github.com/Atlantic18/DoctrineExtensions/blob/master/lib/Gedmo/SoftDeleteable/Filter/SoftDeleteableFilter.php

Softdeletable允许您忽略“已软删除”的实体,而您想忽略“已存档”的标签。 这是一个非常高级的示例,因为它使用了注释等,仅当查询的类是“ Tag”并仅返回“ AND Tag.archived = 0”或任何其他值时,您才需要检查

一种方法是将存档标签标记为“软删除”,另一种方法是制定收集条件。 您可以在Task实体的getTags()方法中应用条件。

public function getTags()
{
    return $this->tags->matching(Criteria::create()->where(Criteria::expr()->eq('archived',true)));
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM