[CakaPHP]ラジオボタンの必須チェック
またもやバリデーションネタ。
ラジオボタンにたいして未選択のチェックを入れる方法。
モデルのバリデーションルールに、'required' => true
とかを入れればよいだけかとおもいきや、なかなか一筋縄ではいかなった。
‘required’ => true
'required' => true
を設定しただけではバリデーションルールが適用されないよう。
ルールを同時に設定する必要があるとか。
このオプションの意味は、指定のキーデータがない場合にチェックされるよう。(たぶん)
ルールには空だとエラー、ということで、notEmpty
を追加。
これで必須のチェックのみは完了。
required属性
モデルでバリデーションを指定すると、自動的にinputタグの属性に、required
が追加されてしまう。
このまま送信しようとすると、Chrome限定だと思うが、エラーが出た送信出来ない。
An invalid form control with name=‘xxx’ is not focusable.
Chromeではrequired
属性が入ったinputでデータがなかった場合は、吹き出しのようなものを出すような仕様になっているが、
radioボタンの場合はその吹き出しを出す場所がなくてエラーになってしまうみたい。
回避方法
回避方法はいくつかあるよう。
1)
なのでradioボタンの場合はこの属性を入れてはいけない。
cakeの場合、オプションに'required' => false
を指定してやることで出さないように出来た。
2)
form
タグの生成時にnovalidate
をtrueでセットしてやればその中のinputタグには、required
属性がつかなくなるよう。
全部にセット出来るという意味ではこれが一番お手軽かも。
ソース
最終的なソースの抜粋は以下。
モデル
1 2 3 4 5 6 |
|
ビュー
1 2 3 4 5 |
|
もしくは、
1 2 3 4 5 6 |
|
参考
html – "Invalid form control" only in Google Chrome – Stack Overflow
CakePHP2.3からinputタグにhtml5のrequired属性がつくようになった – cakephperの日記(CakePHP, Laravel, PHP)