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

Sonata Admin Bundle - Custom field with URL

有没有办法通过过滤器显示 url 到另一个实体列表,而不是显示所有相关实体?

我的实体对其事件有 OneToMany 引用:

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

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

我只想向事件列表显示 link,并向当前所有者显示过滤器。

我正在使用 Symfony 2.5。

是的,这是可能的。

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

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;