Forms 如何注入Symfony表单扩展?

Forms 如何注入Symfony表单扩展?,forms,symfony,configuration,Forms,Symfony,Configuration,我想对Symfony表单进行扩展。这不是Symfony类型的扩展。如何在symfony配置中注册我的自定义扩展名(可能作为服务?) Symfony中已有的示例包括: Symfony\Bridge\Doctrine\Form\DoctrineOrmExtension Symfony\Component\Form\Extension\HttpFoundation\HttpFoundationExtension 根据需要,只有以下标签可用: form.type form.type_extensio

我想对Symfony表单进行扩展。这不是Symfony类型的扩展。如何在symfony配置中注册我的自定义扩展名(可能作为服务?)

Symfony中已有的示例包括:

Symfony\Bridge\Doctrine\Form\DoctrineOrmExtension 
Symfony\Component\Form\Extension\HttpFoundation\HttpFoundationExtension
根据需要,只有以下标签可用:

form.type
form.type_extension
form.type_guesser

没有我需要的
form.extension

的确,symfony2中没有form.extension标记,这些扩展甚至没有在容器中使用标记或事件注册为服务。(事实上,它们甚至没有被使用过…)

只需注册一个标记为表单的服务。键入_extension并在
buildForm()
方法中将您的扩展添加到生成器中

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder->addExtension(new YourWhateverExtension());
}
这是如何手动添加和注册的

use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\Form\Extension\HttpFoundation\HttpFoundationExtension;
use Symfony\Component\Form\Extension\Csrf\CsrfExtension;
use Symfony\Component\Form\Extension\Csrf\CsrfProvider\SessionCsrfProvider;

$session = new Session();
$secret = 'V8a5Z97e...';
$formFactory = Forms::createFormFactoryBuilder()
    ->addExtension(new HttpFoundationExtension())
    ->addExtension(new CsrfExtension(new SessionCsrfProvider($session, $secret)))
    ->getFormFactory();
Symfony使用工厂服务@form.factory

可以找到@form.factory声明

深入挖掘,您将发现@form.registry服务

使用

app/console container:debug --tag=form.type_guesser --show-private
app/console container:debug --tags
app/console container:debug --tag=form.type_guesser --show-private