Forms 如何注入Symfony表单扩展?
我想对Symfony表单进行扩展。这不是Symfony类型的扩展。如何在symfony配置中注册我的自定义扩展名(可能作为服务?) 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\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