Symfony2.7 では、フォームの作成時にコントローラーからフォーム タイプ コンストラクターにパラメーターを直接渡すことができましたが、Symfony3 ではそれができません。
Symfony2.7以前
$postedBy = $this->getUser()->getFullname();
$form = $this->createForm(new NewsType($postedBy));
Symfony3 の After
$form = $this->createForm(NewsType::class); // no idea how to pass parameter?
アップデート:以下からもアクセスしたい:
$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
// how to access posted_by_name here which is sent from controller
}
どのような助けでも大歓迎です。
ベストアンサー1
お時間をいただきありがとうございます。私は自分でこれを解決しました:
NewsType コンストラクターからパラメーターを削除し、$options 配列を使用して postedBy フォーム フィールドにデータを追加し、コントローラーから $options 配列にデータを渡しました。以下を確認してください。
ニュースタイプ
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('postedBy', HiddenType::class, array(
'data' => $options['postedBy']
)
)
;
}
// WARNING: this is a MANDATORY block! Only options described here will be allowed to be passed.
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'postedBy' => null,
));
}
コントローラ
$form = $this->createForm(NewsType::class, $news, array(
'postedBy' => $this->getUser()->getFullname(),
);
アップデート:addEventListener から $options 配列にアクセスする場合は、以下のコードを使用してください。
$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
$postedBy = $event->getForm()->getConfig()->getOptions()['postedBy'];
}
誰かの役に立てれば幸いです!