在cakephp中进行多次验证

时间:2014-10-30 00:42:38

标签: validation cakephp

我想对特定操作使用特定验证,所有这些操作都具有相同的字段(用户名)。

结果:它不起作用,它的行为就像没有任何验证一样(我得到'你的个人资料已被更新。'无论用户名的长度是多少。)< / p>

注意:其中一些操作属于同一视图(reg,log)(不知道是否有任何改变)

我正在使用Cakephp版本2.5.4。


User.php:

class User extends AppModel
{
    public $name = 'User';
    public  $validate  = array( 'reg' => array('username' => array('rule'=>array('minLength',6)))
                              ,'edit' => array('username' => array('rule'=>array('minLength',4)))
                              ,'log' => array('username' => array('rule'=>array('minLength',2)))
                             );
 }

UsersController.php:

public function edit($id) 
{
    $this->User->validate=$this->User->validate['edit'];
    $info = $this->User->findById($id);
    if ($this->User->validates())   
    {
            if ($this->request->is(array('info','put'))) 
            {
                $this->User->id = $id;
                if ($this->User->save($this->request->data)) 
                {
                    $this->Session->setFlash(__('Your profile has been updated.'));
                }
                $this->Session->setFlash(__('Unable to update your profile.'));
            }   
            if (!$this->request->data) 
            {
                $this->request->data = $info;
            }
    }
}

2 个答案:

答案 0 :(得分:1)

你需要像:

public  $myValidationRules  = array(
  'reg' => array(
    'username' => array(
      'minLength' => array(
        'rule' => array('minLength',6)
      )
    )
  ),
  'edit' => array(
    'username' => array(
      'minLength' => array(
        'rule'=>array('minLength',4)
      )
    )
  ),
  'log' => array(
    'username' => array(
      'minLength' => array(
        'rule'=>array('minLength',2)
      )
    )
  )
);

并将它们设置在控制器中,如

$this->User->validate = $this->User->myValidationRules['edit'];

顺便说一句。那个$ this-&gt; User-&gt;验证()的东西应该是什么? - 您刚刚从数据库中读取了现有用户而没有设置任何数据 - 它在那里没用!

答案 1 :(得分:0)

在您使用的用户模型中

$this->validation to set your validation rules. 

在控制器中编辑您正在使用的操作

$this->User->setValidation;

在你的模型中也请定义$ validate变量;

   public $validate;

设置验证规则。

please correct  $this->User->setValidation to $this->User->validation

然后它应该工作。