DEVELOPERS BLOGデベロッパーズブログ
先の記事で CakePHP のバリデーション設定の allowEmpty と input タグの required 属性が連動する件について投稿したが、ちょっと厄介なケースが判明した。例えば、以下のようなフォームがあるとしよう。
ラジオボタンで「その他」が選択された場合にのみテキストボックスが必須のようなケースだ。
このような場合は自前でバリデーションメソッド (以下の例では my_check) を用意しバリデーションルールを
'description' => array( 'myCheck' => array( 'rule' => array('my_check'), 'mesasge' => 'その他の場合は詳細を記述してください。' ), );
のようにしたいのだが、このままだとバリデーションエラーで入力フォームを再描画する際に CakePHP が詳細テキストボックスに対し自動的に required=>"required" を付与してしまうため必須項目にされてしまう。 allowEmpty => TRUE を設定すると required 属性は付与されないが、my_check によるチェックで「その他」かつ空欄だった場合 FALSE を返しても allowEmpty のせいでバリデーションエラーにならず通ってしまう。
結局 required=>FALSE にした上で自前バリデーションメソッド myCheck 内で description テキストフィールドだけでなくラジオボタンの状態もチェックして自前で判断するようコーディングして対応するしかないようだ。
この辺り (複数のフォーム要素の連携バリデーション) がもっと簡単にシステマチックに記述できると CakePHP も使いやすくなるのだが。
この記事は加藤 正人さんが書いています!
- 氏名
- 加藤 正人
- 役職
- 多分SE
- 血液型
- 秘密
- 出没
- 美味しいもののあるところ
- 特色
- タヒチ大好き。ちょいメタボ。
- 2020/12/15
- CakePHP3 のリダイレクトがうまく行かない例
- 2020/11/12
- Apache Bench
- 2020/10/05
- PhpSpreadsheet でExcel ファイルを読み込む (CakePHP3)
関連エントリー
- 2013/12/07
- CakePHP のフォームで required
2020/12/15
2020/11/12
2020/10/05
2020/09/11
2020/08/03