Я создаю пользовательскую панель и у меня возникают проблемы с проверкой данных. Например, страница, на которой вы меняете свой пароль (пользовательское правило проверки, сравнивающее строку из двух полей (пароль, подтвердите пароль)):
Маршрут:
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')
)
);
, кажется, делает трюк, но это не идеально.