2014-09-29 93 views
0

所以我有两个模型,即CompanyUser。这里有关系:对于多个模型的CakePHP一种形式没有正确验证

公司:

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客户端。注意:它创建适用于单个用户都好/编辑:

$这个 - >验证=阵列(

  'name'=>array(
     'Insert user name'=>array(
      'rule'=>'notEmpty', 
      'message'=>'Insert user name', 
      'last'=>false 
     ) 
     ) 
+0

你怎么样声明在模型验证?你能告诉我们这个代码吗? – ylerjen 2014-09-29 12:27:28

+0

亲爱的@ Miam84,我刚刚用模型的逻辑更新了问题。提前致谢。 – Domas 2014-09-29 12:43:48

+0

这是你的控制器的代码(也是有用的)。我的意思是'Model/User.php'文件中'User model'的代码。在那里你应该设置$ validate数组来验证你的模型 – ylerjen 2014-09-29 13:30:17

回答

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*'))); 
+2

正如我在这个问题中写的,我完全意识到这个选择,但它看起来不像是应用验证的一种自然方式。 – Domas 2014-09-29 09:38:17

+0

我发现了表单创建中的一个错误,我添加了它来回答。看看。或者只是告诉我为什么你在那里添加了“0”。可能你已经添加了一些其他目的。 – 2014-09-29 09:50:29

+0

这是在CakePHP中为HasMany创建表单的一种自然方式,您可以在cake文档中阅读所有关于它的内容。 – Domas 2014-09-29 11:15:15

0

saveAllsaveManysaveAssociated的包装。所以你不必调用这两种方法。

然后,根据蛋糕的doc,取消设置验证你应该使用的语法:$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; 
    }  
}