【问题标题】:CakePHP one form for multiple models does not validate properly用于多个模型的 CakePHP 一种表单无法正确验证
【发布时间】:2014-09-29 09:14:31
【问题描述】:

所以我有两个模型,即CompanyUser。以下是关系:

公司:

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;
         }
    }

这里是一些User模型的验证规则,REST服务和Web客户端有两种不同的验证类型,所以这里只针对Web客户端。注意:它适用于单用户创建/编辑:

$this->validate = array(

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

【问题讨论】:

  • 你是如何在你的模型中声明验证的?你也可以给我们看看这段代码吗?
  • 亲爱的@Miam84,我刚刚用模型的逻辑更新了这个问题。提前非常感谢。
  • 这是您的控制器的代码(也很有帮助)。我的意思是User model 在您的Model/User.php 文件中的代码。在那里你应该设置 $validate 数组来验证你的模型
  • 这是来自公司模型的代码。我刚刚用验证规则更新了这个问题,这对于单用户创建/编辑来说可以正常工作。

标签: cakephp cakephp-2.0 cakephp-model


【解决方案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*')));

【讨论】:

  • 正如我在问题中所写,我完全了解此选项,但它看起来不像是应用验证的自然方式。
  • 我在表单创建中发现了一个错误,我已添加它来回答。有看。或者告诉我为什么你在那里添加了“0”。可能你是出于其他目的添加它。
  • 这是在 cakePHP 中为 HasMany 创建表单的自然方式,您可以在 cake 文档中阅读所有相关信息。
  • 那么您打算一次为公司数据添加多个用户吗?
  • 在这种特殊情况下不是,但它可能是一种可能性。
【解决方案2】:

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

然后,根据 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;
    }    
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多