コメントありがとうございます。 残念ながら、もうSlingboxを使っていないた…
EC-CUBEの入力フォームへGETパラメータをデフォルト値として設定する方法
URLパラメータをフォーム初期値に使いたい
EC-CUBEでフォームを作っていると、
「URLのGET値をフォームへ初期表示したい」
「キャンペーンコードを自動入力したい」
「商品コードを事前セットしたい」
というケースがあります。
例えば、
/contact?code=ABC123
へアクセスした際、
フォームの入力欄へ
ABC123
を初期表示したい場合です。
Symfony Formの初期値を使う
EC-CUBE4系はSymfonyベースです。
そのため、
data
や、
empty_data
を利用して初期値設定できます。
ControllerでGET値を取得する
まずはGET値取得。
$code = $request->query->get('code');
例えば、
?code=ABC123
なら、
ABC123
が取得されます。
フォーム生成時に初期値設定
例えば。
$form = $this->formFactory ->createBuilder(FormType::class, null, [ 'code_default' => $code, ]) ->getForm();
FormType側で受け取る
FormType内で、
$resolver->setDefaults([ 'code_default' => '', ]);
を定義。
入力欄へdata設定
例えば。
$builder->add('code', TextType::class, [
'data' => $options['code_default'],
]);
これでGET値が初期表示されます。
Twig側だけでも可能
簡易的にはTwigで、
value="{{ app.request.get('code') }}"
のように書く方法もあります。
ですが、
・Form再描画
・バリデーション
・Symfony標準処理
を考えると、Form側設定の方が綺麗です。
data設定時の注意点
Symfony Formでは、
data
を使うと、
POST後でも初期値が優先される
場合があります。
そのため状況によっては、
empty_data
やイベント利用するケースもあります。
検索フォームではよく使う
例えば、
・商品検索
・問い合わせ種別
・紹介コード
などをURLパラメータから自動設定するケースがあります。
セキュリティにも注意
GETパラメータは外部入力です。
そのため、
・SQL直接利用
・HTML埋め込み
には注意。
通常のSymfony Form利用ならエスケープされます。
まとめ
EC-CUBEでGETパラメータをフォーム初期値へ設定するには、
・ControllerでGET取得
・FormTypeへ渡す
・data設定
の流れが一般的です。
簡易的にはTwigから直接取得も可能ですが、Symfony Form側で管理した方が運用しやすいケースが多いです。
検索

コメントを残す