所以我有两个模型,分别是Company
和User
。以下是关系:
公司:
public $hasMany = array(
'User' => array(
'className' => 'User',
'foreignKey' => 'company_id',
)
用户:
public $belongsTo = array(
'Company' => array(
'className' => 'Company',
'foreignKey' => 'company_id',
)
并且有一个表单正在创建两个实例。问题是只有Company
字段正在验证,User
不是。即使仅仅创建或编辑User
的验证规则也很完美。这是有问题的表格:
echo $this->Form->create('Company', array('action'=>'register'));?>
echo $this->Form->input('Company.name', array('label'=>__('Company name*')));
echo $this->Form->input('Company.address', array('label'=>__('Address*')));
echo $this->Form->input('Company.city', array('label'=>__('City*')));
echo $this->Form->input('User.0.name', array('label'=>__('Name*')));
echo $this->Form->input('User.0.email', array('label'=>__('Email*')));
echo $this->Form->input('User.0.email_confirmation', array('label'=>__('Email confirmation')));
echo $this->Form->end(array('label'=>'Save', 'onclick'=>'disableSubmit(this)'));
我完全了解validate only
选项,但我想知道验证工作的正确方法是什么。
非常感谢任何帮助或指导。
根据要求,我也提供了模型逻辑:
public function registerCompany($data){
unset($this->User->validate['company_id']);
if($this->saveAll($data, array('validate'=>'only'))){
if($this->saveAssociated($data)){
return true;
}
}else{
return false;
}
}
以下是用户模型的一些验证规则,REST服务和Web客户端有两种不同的验证类型,因此仅适用于Web客户端。注意:它对单用户创建/编辑有效:
$ this-> validate = array(
'name'=>array(
'Insert user name'=>array(
'rule'=>'notEmpty',
'message'=>'Insert user name',
'last'=>false
)
)
答案 0 :(得分:1)
使用此方法验证:
假设您要保存来自"公司控制器"。
的数据 if( $this->Company->saveAll(array('validate'=>only)){
//your save logic here
} else {
//here form has some validation errors.
debug($this->Company->validationErrors);
}
试试这个任何回复......
您可以使用"用户"
if( $this->User->saveAll(array('validate'=>only)){
//your save logic here
} else {
//here form has some validation errors.
debug($this->User->validationErrors);
}
和
在表单中将此用于用户数据:
echo $this->Form->input('User.name', array('label'=>__('Name*')));
答案 1 :(得分:0)
saveAll
是saveMany
和saveAssociated
的包装。所以你不必调用这两种方法。
然后,根据Cake的文档,要取消设置验证,您应该使用以下语法:$this->Model->AssociatedModel->validate...
应该是这样的:
public function registerCompany($data){
unset($this->Company->User->validate['company_id']);
if($this->Company->saveAssociated($this->request->data)){
return true;
}else{
return false;
}
}