短縮版
フォームにいくつかの HABTM チェックボックスがあります。検証は正しく機能しています (検証に合格するには、少なくとも 1 つのチェックボックスをオンにする必要があります) が、CakePHP エラー メッセージの div が適切に生成されていません。
ロングバージョン
ユーザーが自分の名前と電子メール アドレスを入力し、受信したいパンフレット (チェックボックス) のリストから選択できるフォームがあります。
フォームは次のようになります。
<?php
echo $this->Form->create('Request',array('action' => 'index'));
echo $this->Form->input('id');
echo $this->Form->input('name');
echo $this->Form->input('email');
echo $this->Form->input('Brochure',array(
'label' => __('Information Required:',true),
'type' => 'select',
'multiple' => 'checkbox',
'options' => $list,
'selected' => $this->Html->value('Brochure.Brochure'),
));
echo $this->Form->submit('Submit');
echo $this->Form->end();
?>
私のコントローラーで$list
は、次のように設定されています:
$this->Request->Brochure->find('list',array('fields'=>array('id','name')));
スタック オーバーフローの CakePHP での HABTM フォーム検証の 2 番目の回答 (user448164 が投稿) を読んだ後、次のようにリクエスト モデルを設定しました。
<?php
class Request extends AppModel {
var $name = 'Request';
function beforeValidate() {
foreach($this->hasAndBelongsToMany as $k=>$v) {
if(isset($this->data[$k][$k]))
{
$this->data[$this->alias][$k] = $this->data[$k][$k];
}
}
}
var $validate = array(
'name' => array(
'rule' => 'notEmpty',
'message' => 'Please enter your full name'
),
'email' => array(
'rule' => 'email',
'message' => 'Please enter a valid email address'
),
'Brochure' => array(
'rule' => array('multiple', array('min' => 1)),
'message' => 'Please select 1'
),
);
?>
これは実際には 99% うまく機能します。チェックボックスがどれもチェックされていない場合、検証は失敗します。ただし、唯一の問題は、Cake が に「エラー」クラスを設定しておらず、必要に応じ<div>
て を作成し<div class="error-message">Please select 1</div>
ていないことです。
名前と電子メールについては問題ありません。エラー div は適切に作成されています。
したがって、明確にするために、検証は私のHABTMチェックボックスで機能しています。唯一の問題は、エラー div が生成されていないことです。