Validation cakephp中的多重验证

Validation cakephp中的多重验证,validation,cakephp,Validation,Cakephp,我想对一个特定的操作使用一个特定的验证,它们都有相同的字段(用户名) 结果:它不起作用,行为就像根本没有验证一样(无论用户名的长度如何,我都会得到“您的个人资料已更新”) 注意:其中一些操作在同一视图中(reg,log)(不知道这是否会改变任何内容) 我使用的是Cakephp版本2.5.4 User.php: class User extends AppModel { public $name = 'User'; public $validate = array( 'reg

我想对一个特定的操作使用一个特定的验证,它们都有相同的字段(用户名)

结果:它不起作用,行为就像根本没有验证一样(无论用户名的长度如何,我都会得到“您的个人资料已更新”)

注意:其中一些操作在同一视图中(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)))
                             );
 }
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;
            }
    }
}
userscocontroller.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)))
                             );
 }
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;
            }
    }
}

在您使用的用户模型中

$this->validation to set your validation rules. 
$this->User->setValidation;
其中,与正在使用的控制器编辑操作相同

$this->validation to set your validation rules. 
$this->User->setValidation;
在您的模型中,也请定义$validate变量

   public $validate;
设置验证规则

please correct  $this->User->setValidation to $this->User->validation
然后它就可以工作了。

你需要像这样:

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->User->validates()应该在那里做什么您刚刚从数据库中读取了一个已经存在的用户,而没有设置任何数据-这在那里是无用的

我已经编辑了上面的代码,你能检查一下我所要做的一切吗,因为它在你的控制器代码中不起作用,请更改这行$this->User->validate=$this->User->validation['edit'];要$this->User->validate=$this->User->validate['edit'];vielen dank hmic,它可以工作,是的$this->User->validates()在这里没有意义,但是我现在出现了一个问题,验证错误消息显示在视图中的每个用户名字段下,即使它是空的。为了进一步解释:我的注册表和登录表单都有一个用户名字段,当我在register username中写入不允许的内容时,我会收到两次消息,在two-formsHow中,如果一个视图中有两个相同模型的表单,您认为cake会区分错误(或设置值)所指的用户名字段吗?-它不能!我个人认为这也不是什么好主意。但是,您可以更改不同表单使用的模型(井字段名称),并在稍后的控制器中进行调整。我可以做这项工作,但有点老套,不直截了当。