Проблема Cakephp 3.0 при проверке, когда мы используем другой набор проверки

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