Symfony 3.Xのアップデート、2つのオプションがあります...
オプションを介してサービスを送信する
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setRequired('option_key');
}
次に、それをコントローラーに通します
$form = $this->createForm(XXXType::class, $entity, array(
'option_key' => $this->get('service_you_want_to_call')
));
フォームをサービスとして定義する
このオプションはよりクリーンなIMOであり、フォームを呼び出すすべての場所にオプションを送信する必要はありません
class XXXType extends AbstractType
{
private $service;
public function __construct(ServiceType $service)
{
$this->service = $service;
}
次に、構成でサービスを定義します
services:
app.form.type.XXX:
class: AppBundle\Form\XXXType
arguments: ['@service_you_want_to_call']
tags:
- { name: form.type }
でフォームを呼び出すたびに
$this->createForm(XXXType::class, $data, $options)
symfonyはそのサービス引数を使用する必要があることを知るのに十分賢いので(form.typeタグのためにそれを知っています)、コンストラクターにデータを渡す必要はもうありません。
Symfonyドキュメント:フォーム内からサービスまたは設定にアクセスする方法