如何验证cakephp中的多个模型

时间:2014-01-08 12:43:31

标签: php cakephp

我想使用模型验证。 我可以清楚地解释一下在我看来,有一个名为“register.ctp”的文件。另外我有两个表一个是用户,另一个是配置文件,根据cakephp概念我也有两个模型,即用户模型(User.php)和配置文件模型(Profile.php)。 我的register.ctp包含以下字段

姓名,电子邮件,地址和电话都是强制性的 - 当我提交时,姓名和电子邮件将存储在用户表和地址中,电话将存储在个人资料表中

当我使用模型验证时,我尝试使用以下代码,该代码仅适用于名称和电子邮件但不适用于其他字段。

这是我在用户模型(User.php)中进行模型验证的代码

public $validate = array(
     'email' => array(
        'blank' => array(
            'rule' => 'notEmpty',
            'message' => 'Please enter Email.'
        )
    ),

    'name' => array(
        'rule'    => 'notEmpty',
        'message' => 'Please enter Name'
    ),
    'address' => array(
        'rule'    => 'notEmpty',
        'message' => 'Please enter Address'
    ),
    'phone' => array(
        'rule'    => 'notEmpty',
        'message' => 'Please enter Phone'
    ),

);

由于

2 个答案:

答案 0 :(得分:0)

您需要为每个模型设置验证。

所以在User.php

public $validate = array(
     'email' => array(
        'blank' => array(
            'rule' => 'notEmpty',
            'message' => 'Please enter Email.'
        )
    ),
    'name' => array(
        'rule'    => 'notEmpty',
        'message' => 'Please enter Name'
    )
);

Profile.php

public $validate = array(
    'address' => array(
        'rule'    => 'notEmpty',
        'message' => 'Please enter Address'
    ),
    'phone' => array(
        'rule'    => 'notEmpty',
        'message' => 'Please enter Phone'
    )
);

您需要在Controller中验证两个模型:

$this->User->set($this->data());
$valid = $this->User->validates();

$this->Profile->set($this->data);
$valid = $valid && $this->Profile->validates();

答案 1 :(得分:0)

请参阅这两种模型方法。

同样请参阅Model::saveAll()。它可用于验证整组记录和相关记录。这只会验证但不能保存reocrds:

$this->saveAll($data, array('validate' => 'only'));

我建议您阅读有关saveAll()的整个文档,以了解它的工作原理以及仅在验证数据时将返回的内容。

无需像noslone建议的那样逐个手动验证每个模型。上面的单行也可以。