CakePHPに入力フィールドの依存関係を処理させることは可能ですか?
echo $this->Form->checkbox('foo');
echo $this->Form->input('bar'); //is hidden initially
そして、fooがチェックされている場合にのみ、バーを表示して検証しますか?
CakePHPに入力フィールドの依存関係を処理させることは可能ですか?
echo $this->Form->checkbox('foo');
echo $this->Form->input('bar'); //is hidden initially
そして、fooがチェックされている場合にのみ、バーを表示して検証しますか?
必要な jQuery (実際には実際の名前を入力していないため、コードのクラスを更新する必要があります)。最初は、CSS でバーを非表示にする必要があります。
(function(){
$('#foo').on('change', function() {
if($(this).is(':checked')) {
$('#bar').fadeIn();
}
});
});
これを行う最善の方法は、javascript を使用することです。CakePHP はサイド サーバー用の PHP コードを生成するだけであることを思い出してください。
<script >
$(document).ready(function(){
$('#MyModelFoo').change(function(){
if($(this).is(':checked')) {
$('#MyModelBar').fadeIn();
}
});
</script>
<?php
echo $this->Form->create('MyModel');
echo $this->Form->checkbox('foo');
echo $this->Form->input('bar'); //is hidden initially
echo $this->Form->end();
?>
JavaScriptを使用します。CakePHPが作成されたサーバー側のプログラミング言語では、入力フィールドを動的に表示/非表示にすることはできません。
他の人は、フィールドを表示/非表示にするために必要な jQuery を投稿しています。CakePHP でそれを検証する方法は次のとおりです。
AppModel では:
public function requiredIfChecked($check, $associatedField) {
$value = array_pop($check);
if ($this->data[$this->alias][$associatedField] && empty($value)) {
return false;
}
else {
return true;
}
}
検証配列で:
public $validate = array(
'bar'=>array(
'required_if_checked'=>array(
'rule'=>array('requiredIfChecked', 'foo'),
'message'=>'cannot be blank if foo is checked'
)
)
);
はい、そうですが、そのためにはクライアント側のプログラミングを使用する必要があります.phpはそのようなshow hide..jを実行できないため、クエリが最適です.cakephpには、そのような依存関係をチェックする機能がすでにあり、私が間違っていなければデフォルトでは、cakephp はプロトタイプ js を使用するため、observField と呼ばれます。