Sonata Admin Bundle - 带URL的自定义字段

时间:2015-01-28 13:51:45

标签: php symfony sonata-admin

是否可以通过过滤器向其他实体列表显示网址,而不是显示所有相关实体?

我的实体有OneToMany引用它的事件:

/**
 *
 * @ORM\OneToMany(targetEntity="Event", mappedBy="organizer", cascade={"ALL"})
 */
private $events;

$ formMapper-> add(' events')向我显示包含所有事件的select2输入。

我只想显示一个指向事件列表的链接,其中包含对当前所有者的过滤。

我正在使用Symfony 2.5。

1 个答案:

答案 0 :(得分:0)

是的,这是可能的。

您必须获取当前所有者并创建自定义查询构建器才能仅获取与所有者标识符相关的事件。

protected function configureFormFields(FormMapper $formMapper)
{
    // get current owner
    $ownerId = $this->subject->getId();
    // using query_builder to create a custom query based on current owner
    $formMapper->add('events', null, array(
        'query_builder' => function(EntityRepository $er) use ($ownerId) {
            $events = $er->createQueryBuilder('e');
            if ($ownerId != null) {
                $events = $er->where('e.owner = :ownerId')
                             ->setParameter('ownerId', $ownerId);
            }
            return $events;
        }
    ));
}

另外不要忘记为EntityRepository添加用途:

使用Doctrine \ ORM \ EntityRepository;