在cakephp中进行表单验证

时间:2011-05-26 11:20:02

标签: php validation cakephp

我有一个模型login - 它有5个字段。在注册时我正在验证所有字段,但是当我编辑记录时,我想在保存数据之前仅验证一些字段。

我正在使用此代码:

if ($this->Login->validates(array('fieldList' => array('password','name')))) {
    if ($this->Login->save($this->data)) {
        echo 'helllo';exit;
        //$this->Session->setFlash('Your post has been updated.');
        //$this->redirect(array('action' => 'profile'));
    }else {

    }
} else {

}

但它不起作用。

3 个答案:

答案 0 :(得分:2)

您应该通过设置on to create in the validation rule来正确执行此操作。每次在控制器中重复这个逻辑都是不好的。

您的具体问题是save正在验证 ,并验证所有字段。事实上,第一次调用validates完全是多余的。如果您只想保存/验证某些字段,则必须使用$fieldlist函数的第三个save参数:

$this->Login->save($this->data, true, array('password','name'))

答案 1 :(得分:0)

你最好分开一切,首先你验证,如果一切顺利,只有这样,保存任何数据。

验证应该返回一些数据,如果它已经失败,另外,每个字段都有不同的数据类型,要检查的不同内容 - 对于您的站点应该有一些分类,对于特定字段应该有什么限制。

答案 2 :(得分:0)

如果我理解正确,您只希望验证适用于create,而不是update。 Cake内置了此功能。

在您的模型中,每个字段验证规则都是,您将具有类似于:

的内容
var $validate = array(
    'fieldName1' => array(
        'rule' => 'ruleName', // or: array('ruleName', 'param1', 'param2' ...)
        'required' => true,
        'allowEmpty' => false,
        'on' => 'create', // or: 'update'       ** here **
        'last' => false,
        'message' => 'Your Error Message'
    )
);

可能会解决您的问题。