#validation #cakephp-3.0
#проверка #cakephp-3.0
Вопрос:
У меня есть пользовательская форма для изменения пароля. Но проверки не работают должным образом на этой странице.
Файл шаблона (change_password.ctp):
<div class="users index large-9 medium-8 columns content">
<?= $this->Form->create('change_password') ?>
<fieldset>
<legend><?= __('Change password') ?></legend>
<?= $this->Form->input('old_password', ['type' => 'password', 'label' => 'Old password']) ?>
<?= $this->Form->input('new_password', ['type' => 'password', 'label' => 'Password']) ?>
<?= $this->Form->input('confirm_password', ['type' => 'password', 'label' => 'Repeat password']) ?>
</fieldset>
<?= $this->Form->button(__('Change')) ?>
<?= $this->Form->end() ?>
</div>
Код проверки, включенный в пользовательскую функцию в UsersTable.php страница:
public function validationChangePassword(Validator $validator) {
$validator
->requirePresence('old_password', 'create')
->notEmpty('old_password');
$validator
->requirePresence('new_password', 'create')
->notEmpty('new_password');
$validator
->notEmpty('confirm_password')
->add('confirm_password', 'no-misspelling', [
'rule' => ['compareWith', 'new_password'],
'message' => 'Passwords are not equal',
]);
return $validator;
}
Я включил действие ChangePassword() в контроллер UsersController.php
public function changePassword() {
$user = $this->Users->newEntity();
if (isset($this->request->data) amp;amp; !empty($this->request->data)) {
$user = $this->Users->patchEntity($user, $this->request->data, [
'validate' => 'changePassword'
]);
if ($user->errors()) {
$this->Flash->success(__('Error'));
}
}
}
Комментарии:
1. Что означает «неправильно работает»? Опишите, в чем ваша проблема.
2. Не могли бы вы объяснить, как мы можем создавать проверки для пользовательской формы смены пароля? Я создал пользовательский контроллер и действие с именем changepassword и добавил код проверки в UsersTable.php страница. Элемент управления переходит к функции проверки, но проверка у меня не работает
3. Не могли бы вы, пожалуйста, исправить приведенный выше код, чтобы я мог отобразить проверку на самой странице моего шаблона?
4. Вы имеете в виду, что хотите использовать другой набор проверки для определенного CRUD в вашем приложении?
5. Точно. Но я думаю, что управление переходит к функции проверки, но проверка не отображается в разных полях формы.
Ответ №1:
Обновите свое действие, как показано ниже:
public function changePassword() {
$user = $this->Users->newEntity();
if (isset($this->request->data) amp;amp; !empty($this->request->data)) {
$user = $this->Users->patchEntity($user, $this->request->data, [
'validate' => 'changePassword'
]);
if ($user->errors()) {
$this->Flash->success(__('Error'));
}
}
$this->set(compact('user'));
}