我正在构建用户面板,并且在数据验证方面存在一些问题。例如,您更改密码的页面(自定义验证规则比较来自两个字段的字符串(密码,确认密码)):
路线:
Router::connect('/profile/password', array('controller' => 'users', 'action' => 'profile_password'));
控制器:
function profile_password()
{
$this->User->setValidation('password'); // using the Multivalidatable behaviour
$this->User->id = $this->Session->read('Auth.User.id');
if (empty($this->data))
{
$this->data = $this->User->read();
} else {
$this->data['User']['password'] = $this->Auth->password($this->data['User']['password_change']);
if ($this->User->save($this->data))
{
$this->Session->setFlash('Edytowano hasło.', 'default', array('class' => 'success'));
$this->redirect(array('action' => 'profile'));
}
}
}
问题是,当我到达http://website.com/profile/password
并在其中一个字段中输入错误时,脚本会返回http://website.com/users/profile_password/5
(5是当前登录用户的ID)。当我正确键入它然后它工作,但我真的不希望地址改变。
似乎验证不支持路由......(?)顺便说一句,我正在使用Cake 1.3。
任何帮助将不胜感激, 保罗
更改视图:
echo $form->create(
'User',
array(
'url' => array('controller' => 'users', 'action' => 'profile_password'),
'inputDefaults' => array('autocomplete' => 'off')
)
);
为:
echo $form->create(
'User',
array(
'url' => '/profile/password',
'inputDefaults' => array('autocomplete' => 'off')
)
);
确实可以做到这一点,但那并不理想。
答案 0 :(得分:0)
检查profile_password.ctp
视图文件中的表单网址。
请尝试以下代码:
echo $this->Form->create('User', array('url' => array('controller' => 'users', 'action' => 'profile_password')));
另外,我认为您的表单可能有点脆弱。尝试使用Firebug或类似方法将data[User][id]
发布到您的操作中。如果我是对的,你应该设置:
$this->data['User']['id'] = $this->Auth->user('id');
而不是:
$this->User->id = $this->Session->read('Auth.User.id');
因为您在id
设置了$this->data
字段。
HTH。