ysku's blog

ウェブ・無線通信・組み込みとか

HTML5のvalidateとCakePHP

f:id:yusuke1581:20141112005253j:plain
モデルにて$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);
?>

f:id:yusuke1581:20141227025108p:plain
このように入力する前からフォームが赤い枠で囲われてしまいます.

実際に出力された要素を見てみると以下のようになっていました.
f:id:yusuke1581:20141227025358p:plain
required属性(入力必須であることをブラウザに知らせる)が指定されていて,これが初期状態から赤い枠で囲われてしまう原因となっています.

required属性を出力させないようにするにはどうしたらいいかと言うと,モデルにて定義したバリデーションルールに'allowEmpty' => trueにすれば解決します.
実際のコードは以下のようになります.

public $validate = array(
	'name' => array(
		'notEmpty' => array(
		        'rule' => 'notEmpty',
			'message' => 'hoge',
                        'allowEmpty' => true,
                ),
        ),
);

これで赤枠が取り除かれます.

ただ,'allowEmpty' => trueにすると,フォームが空の状態でもsubmit出来てしまいます.
どうすればいいんでしょ...