CakePHP3でunlockedFieldsを使用する

CakePHP3でunlockedFieldsを使用する

cakephp_hidden_post_top

SecurityComponentにて動的に変更するhidden項目をPOSTする方法

使い慣れていない CakePHP3 にて、フォームの入力項目を調整していたところ、POST したときに CakePHP の SecurityComponent にてエラーが発生。挙動を確認しているとjavascript で動的に hidden 項目を編集しているのが原因であることが判明しました。

思いの他、修正するのに時間がかかったため、備忘録として残します。

Advertisement

問題の解決方法

結論から言うと hidden の項目を「unlockedFields」に設定すれば良いことが分かりました。

unlockedFields
POST バリデーションを解除したいフォームフィールドの一覧をセットします。 このコンポーネントの他にも、 FormHelper::unlockField() でも解除できます。制限が解除されたフィールドは、POST 時に必須ではなくなり、 hidden フィールドの値もチェックされません。

〇参照元:CakePHP3 の SecurityComponent の説明ページ
https://book.cakephp.org/3.0/ja/controllers/components/security.html

通常はセキュリティの関係上、unlockedFields は使用しません。ただ javascript などで隠し項目を動的に編集するときは unlockedFields を設定しないと問題があるとのことでした。

やり方が分かれば簡単で、事前の共通処理を行う「beforeFilter」メソッド内で、対象項目に unlockedFields を設定すれば問題が解決します。

最後に unlockedFields のサンプルプログラムを記載します。
add アクション時に hidden 項目「test_column」に unlockedFields を設定したものです。

サンプルプログラム

Advertisement

この記事が気に入ったら
いいね ! をお願いします

Twitter で

web開発カテゴリの最新記事