自定义路由问题的数据验证(发生错误时的默认URL)

时间:2010-12-29 13:32:59

标签: validation cakephp routing

我正在构建用户面板,并且在数据验证方面存在一些问题。例如,您更改密码的页面(自定义验证规则比较来自两个字段的字符串(密码,确认密码)):

路线:

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。

任何帮助将不胜感激, 保罗


编辑1:

更改视图:

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')
    )
  );

确实可以做到这一点,但那并不理想。

1 个答案:

答案 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。