我想对特定操作使用特定验证,所有这些操作都具有相同的字段(用户名)。
结果:它不起作用,它的行为就像没有任何验证一样(我得到'你的个人资料已被更新。'无论用户名的长度是多少。)< / 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;
}
}
}
答案 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
然后它应该工作。