symfony2 にform.extensionタグがなく、それらの拡張機能がタグまたはイベントを使用してサービスとしてコンテナーに登録されていないことは事実です。(実際には使用すらされていません...)
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 宣言はここにあります。
さらに掘り下げると、ここに@form.registryサービスが見つかります
<!-- 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>
ヒント:
app/console container:debug
2.2 以降のコマンドを使用して、symfony2 のコンテナ タグをデバッグできます-この PRを参照してください。
を使用してすべてのタグを一覧表示する
app/console container:debug --tags
を使用して特定のタグを検索します
app/console container:debug --tag=form.type_guesser --show-private