はじめに
この記事は開発初心者の筆者が、開発時にやりたかったことをどう実現したかを書いています。
初心者ゆえ、至らない点や誤った情報を書いているかもしれませんが、その際はコメント等でご指摘頂けたら幸いです。
やりたいこと
formTypeにEntityタイプで追加した要素の各フィールドを取得して条件分岐したい。
本記事では、下記を例に書いていこうかと思います。
例)受注登録で支払方法に応じてあれこれしたい
環境
・EC-CUBE 4.2.0
・Symfony 5.4.12
・PHP 7.4.26
書き方
受注登録画面に使われているOrderTypeに、下記のようにして支払方法のセレクトボックスが追加されている。
src/Eccube/Form/Type/Admin/OrderType.php
('Payment', EntityType::class, [
'requred' => false,
'class' => Payment::class,
'choise_label' => function(Payment $Payment){
return $Payment->isVisible()
? $Payment->getMethod()
: $Payment->getMethod().trans('admin.common.hidden_label');
},
'query_builder' => function($er){
return $er->createQueryBuilder('p')
->orderBy('p.visible', 'DESC')
->addOrderBy('p.sort_no', 'ASC');
},
'constraints' => [
new Assert\NotBlank(),
],
])
例えば、支払方法が「代金引換」の時に何か処理をしたい場合は、twig上では下記のように記述する。
{% if form.Payment.vars.data.Method == '代金引換' %}
// ここに処理
{% endif %}
Entityのフィールドを取得する記述
form.Payment.vars.data.{Entityで宣言したフィールド変数名}
こうすることで、コントローラからわざわざEntityを返したりしなくても、formだけで解決することが出来た。
備考
「*.vars.data.*」とは別に「*.vars.value」があるが、これはセレクトボックスのセレクト値を取得することができる。
今回の例でいうと、dtb_paymentに登録されているidがセレクト値になっているので「代金引換」の場合は、"4"の値が取得できる。