Проверка данных с использованием пользовательского маршрута (URL-адрес по умолчанию при возникновении ошибок) - PullRequest
0 голосов
/ 29 декабря 2010

Я создаю пользовательскую панель и у меня возникают проблемы с проверкой данных. Например, страница, на которой вы меняете свой пароль (пользовательское правило проверки, сравнивающее строку из двух полей (пароль, подтвердите пароль)):

Маршрут:

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 - идентификатор текущего зарегистрированного пользователя). Когда я набираю его правильно, он работает, но я не хочу, чтобы адрес менялся.

Кажется, что маршруты не поддерживаются проверкой ... (?) Кстати, я использую 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 голосов
/ 29 декабря 2010

Проверьте URL формы в profile_password.ctp файле просмотра.

Попробуйте следующий код:

echo $this->Form->create('User', array('url' => array('controller' => 'users', 'action' => 'profile_password')));

Кроме того, я думаю, что ваша форма может быть немного уязвимой. Попробуйте использовать Firebug или что-то похожее на POST data[User][id] для ваших действий. Если я прав, вы должны установить:

$this->data['User']['id'] = $this->Auth->user('id');

вместо:

$this->User->id = $this->Session->read('Auth.User.id');

потому что ваше поле id установлено в $this->data.

НТН.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...