Validation cakephp中的多重验证
我想对一个特定的操作使用一个特定的验证,它们都有相同的字段(用户名) 结果:它不起作用,行为就像根本没有验证一样(无论用户名的长度如何,我都会得到“您的个人资料已更新”) 注意:其中一些操作在同一视图中(reg,log)(不知道这是否会改变任何内容) 我使用的是Cakephp版本2.5.4Validation cakephp中的多重验证,validation,cakephp,Validation,Cakephp,我想对一个特定的操作使用一个特定的验证,它们都有相同的字段(用户名) 结果:它不起作用,行为就像根本没有验证一样(无论用户名的长度如何,我都会得到“您的个人资料已更新”) 注意:其中一些操作在同一视图中(reg,log)(不知道这是否会改变任何内容) 我使用的是Cakephp版本2.5.4 User.php: class User extends AppModel { public $name = 'User'; public $validate = array( 'reg
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会区分错误(或设置值)所指的用户名字段吗?-它不能!我个人认为这也不是什么好主意。但是,您可以更改不同表单使用的模型(井字段名称),并在稍后的控制器中进行调整。我可以做这项工作,但有点老套,不直截了当。