如何在symfony2表单中显示具有特定标记的所有服务的名称

时间:2013-05-16 23:19:14

标签: forms symfony service formbuilder

我有几个使用相同标签标记的服务。我想知道如何继续检索所有thoses服务的列表并将其注入表单?

这是我最后想要的例子:

$builder->add('days', 'choice', array(
    'choices' => $SERVICES,
    'multiple' => false,
    'expanded' => false,
    ))

1 个答案:

答案 0 :(得分:0)

主要思想是定义一个服务来处理某种类型的所有标记服务,然后在编译器中将标记服务添加到此服务。

Working with Tagged Services上的文档为例,您可以添加一个返回所有服务的方法:

<?php

// ...

class TransportChain
{
    // ...

    /**
     * @return array
     */
    public function getTransports()
    {
        return $this->transports;
    }
}

然后从您可以访问DIC的任何地方,只需使用:

// Get access to all services tagged with "acme_mailer.transport"
$transports = $this
    ->getContainer()
    ->get('acme_mailer.transport_chain')
    ->getTransports()
;

当然,你必须稍微调整一下这一点,以便返回字符串而不是对象。