この記事には広告を含む場合があります。
記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。
使い慣れていない CakePHP3 にて、フォームの入力項目を調整していたところ、POST したときに CakePHP の SecurityComponent にてエラーが発生。挙動を確認しているとjavascript で動的に hidden 項目を編集しているのが原因であることが判明しました。
思いの他、修正するのに時間がかかったため、備忘録として残します。
問題の解決方法
結論から言うと 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 を設定したものです。
サンプルプログラム
1 2 3 4 5 6 |
public function beforeFilter(Event $event) { if($this->request->action == 'add'){ $this->Security->setConfig('unlockedFields', ['test_column']); } } |