CakePHP3でunlockedFieldsを使用する

cakephp_hidden_post_top

この記事には広告を含む場合があります。

記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。

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

使い慣れていない 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 を設定したものです。

サンプルプログラム

 

 

ウェブプログラミングについては下記の本も参考になるので、スキルアップにお役立てください。

created by Rinker
徳丸 浩(著)
ページ数: 688ページ
出版社:SBクリエイティブ
発売日:2018/06/21

出典:amazon