访问关联模型中的验证规则(CakePHP)

时间:2010-12-29 05:05:13

标签: cakephp cakephp-1.3

您好我一直在尝试从我的主控制器访问相关模型的验证规则。它似乎没有工作,我没有找到任何关于此的参考。这是我想要做的:

用户控制器剪辑:

$this->User->TalentProfile->set( $this->data );
if ($this->User->TalentProfile->validates()) {
    //it always validates and doesn't seem to see model's validation rules
}

TalentProfile模型片段:

var $validate = array (
        'first_name' => array(
            'maxLength' => array(
                    'rule' => array('maxLength', 20),  
                    'message' => 'Can not be longer than 20 characters.',
                    'last' => true
            ),
            'first_name_not_empty' => array(
                    'rule' => 'notEmpty',
                    'message' => 'This field is required',
                    'last' => true
            ),
        ),
);

我还尝试重新包装数组,我的想法是模型名称可能与验证有关:

$this->User->TalentProfile->set( array('TalentProfile',$this->data) ) );

我也试过这个希望,但结果仍然相同:

$this->loadModel('TalentProfile');
$this->TalentProfile->set( $this->data) );

我缺少一些东西。请帮忙!感谢

编辑:

我试图保存表单数据,这在SQL中给我空白。我认为这可能比我想象的更简单。

1 个答案:

答案 0 :(得分:1)

通过在TalentProfile模型中设置$ validate数组,您需要具有以下格式的数据:

Array(
    [TalentProfile] => Array(
        [first_name] =>
    )
)

关于这是如何工作的一点解释:

在致电$this->User->TalentProfile->validates()$this->TalentProfile->validates()中,您正在使用TalentProfile模型中的验证方法。这意味着CakePHP将根据该模型中的验证规则验证您的输入数据,因此它希望在数组中设置TalentProfile键(但如果不是,则安静地停止)。

$validates数组中,您已为名为first_name的密钥设置了验证规则。 CakePHP将此键作为从表单输入的字段名称。

目前,您输入的内容为fname而不是first_name。您的输入也与User模型相关联,而非TalentProfile

如果您进一步解释您要对表单进行的操作,我可以提供更多帮助。