HTML5のvalidateとCakePHP
モデルにて$validateを定義すると,viewに実装したformにてバリデーションが行われるわけですが,ちょっと面倒な部分があったのでメモ.
例えば以下のようなバリデーションルールを作成し,
public $validate = array( 'name' => array( 'notEmpty' => array( 'rule' => 'notEmpty', 'message' => 'hoge', ), ), );
ビューに以下のようなフォームを実装した場合,
<?php echo $this->Form->create(); echo $this->Form->input('name', array( 'type' => 'text', )); $options = array( 'label' => 'submit', ); echo $this->Form->end($options); ?>
このように入力する前からフォームが赤い枠で囲われてしまいます.
実際に出力された要素を見てみると以下のようになっていました.
required属性(入力必須であることをブラウザに知らせる)が指定されていて,これが初期状態から赤い枠で囲われてしまう原因となっています.
required属性を出力させないようにするにはどうしたらいいかと言うと,モデルにて定義したバリデーションルールに'allowEmpty' => trueにすれば解決します.
実際のコードは以下のようになります.
public $validate = array( 'name' => array( 'notEmpty' => array( 'rule' => 'notEmpty', 'message' => 'hoge', 'allowEmpty' => true, ), ), );
これで赤枠が取り除かれます.
ただ,'allowEmpty' => trueにすると,フォームが空の状態でもsubmit出来てしまいます.
どうすればいいんでしょ...