確實沒有form.extension tag in symfony2和這些擴展甚至沒有在容器中註冊爲使用標籤或事件的服務。 (實際上它們甚至沒有被使用......)
只需註冊一個標記爲的服務form.type_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聲明可以找到here。
進一步挖掘,你會發現@ form.registry服務here
<!-- FormRegistry -->
<service id="form.registry" class="%form.registry.class%">
<argument type="collection">
<!--
We don't need to be able to add more extensions.
* more types can be registered with the form.type tag
* more type extensions can be registered with the form.type_extension tag
* more type_guessers can be registered with the form.type.type_guesser tag
-->
<argument type="service" id="form.extension" />
</argument>
<argument type="service" id="form.resolved_type_factory" />
</service>
提示:
您可以在Symfony2中使用app/console container:debug
命令,因爲2.2調試容器的標籤 - 見this PR。
使用列表中
app/console container:debug --tags
搜索使用
app/console container:debug --tag=form.type_guesser --show-private
某個標記的所有標記