Торт PHP 4.0 - как создать и показать ошибки проверки по полям? - PullRequest
0 голосов
/ 29 апреля 2020

Я использую Cake PHP 4.0 и создаю страницу регистрации пользователя. Я установил некоторые правила проверки, которые возвращают ошибки, когда они ожидаются, но я не могу понять, как заставить их отображаться в соответствующих полях формы. В версии 3.0 это происходило автоматически.

Моя форма (в register.php):

echo $this->Flash->render();
echo $this->Form->create();
echo $this->Form->control('name');
echo $this->Form->control('email');
echo $this->Form->control('password', array('type' => 'password'));
echo $this->Form->control('confirm_password', array('type' => 'password'));

В UsersController.php У меня есть действие register:

    public function register() {

        $user = $this->Users->newEmptyEntity();

        if($this->request->is('post')) {

            $user = $this->Users->patchEntity($user, $this->request->getData());
            if($user->getErrors()) {
                $this->Flash->error(__('Unable to register you.  Please make sure you have completed all fields correctly.'));
            }else {
                $this->Users->save($user);
                $this->Flash->success(__('Success'));
                return redirect($this->get_home());
           }

       }

       $this->set('user', $user);

   }

Правило проверки в UsersTable:

public function validationDefault(Validator $validator): Validator {

    $validator->requirePresence([
                'name' => [
                        'mode' => 'create',
                        'message' => 'Please enter your name'
                ],
                'email' => [
                        'mode' => true,
                        'message' => 'Please enter your email address'
                ]
            ])
            ->allowEmptyString('name', 'Name cannot be empty', false);
}

Если я отправляю форму, не вводя ничего для имени или адреса электронной почты, getErrors () выбирает недопустимые поля и создает массив, который я вижу с помощью отладки, содержит:

'name' => [
        '_empty' => 'Name cannot be empty'
    ]

Таким образом, он понял, что поле имени не проверяется, но не показывает его в отношении поля в форме (или в любом месте), как это было в версия 3.0.

Что еще мне нужно сделать?

1 Ответ

1 голос
/ 29 апреля 2020

Благодаря Salines я использовал

echo $this->Form->create($user);

вместо

echo $this->Form->create();

, и сразу обнаруживались ошибки.

...