ワイズリマインダー

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側で管理した方が運用しやすいケースが多いです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

検索

最近のコメント

最近の投稿

タグ

フィード配信

アーカイブ

外部リンク