Проверка модели cakephp 3.x не отображается при сохранении данных в 2 таблицы

У меня есть две таблицы сотрудников и пользователей сотрудников имеет поле user_id отношение между ними, используя пользователя hasOne сотрудник и сотрудник принадлежит пользователю, у меня есть следующий код в моем файле просмотра

<?php 
    echo $this->Form->input('employee.name');
    echo $this->Form->input('user.email');
    echo $this->Form->input('user.username');
    echo $this->Form->input('employee.employee_level');
?>

мой код EmployeeController

<?php 

    $employee = $this->Employees->newEntity($this->request->data);
    $user = $this->Employees->Users->newEntity($this->request->data);
        if ($this->request->is('post')) {

            $employee = $this->Employees->patchEntity($employee, $this->request->data, [
                'associated' => ['Users']
            ]);

            if($this->Employees->save($employee)) {

                $this->Flash->success(__('The employee has been saved.'));

            } else {
                $this->Flash->error(__('The employee could not be saved. Please, try again.'));
            }
        }
?>

Сохранение данных, если все идет хорошо и безупречно, но если есть какие-то ошибки проверки, например, имя пользователя уже существует или электронная почта уже существует, то просто показывает флэш-сообщение о том, что сотрудник не может быть сохранен, пожалуйста, попробуйте еще раз, чтобы не отображалось сообщение об ошибке проверки модели под полями, как показано на прикрепленном изображении, когда я пытаюсь сохранить данные в одной таблице введите описание изображения здесь

Пожалуйста, скажите мне, в чем проблема в моем представлении или файле контроллера, чтобы при наличии ошибок валидации в любой из двух моделей было отображено сообщение об ошибке в соответствующем поле

Извините за мой плохой английский Спасибо

1 ответ

Решение

Попробуйте это для своей формы. Вам не нужно указывать название модели верхнего уровня.

echo $this->Form->input('name');
echo $this->Form->input('user.email');
echo $this->Form->input('user.username');
echo $this->Form->input('employee_level');

И в вашем контроллере вы никогда не используете $user, так что нет смысла его создавать, и, поскольку вы исправляете сущность сотрудника данными запроса, вам не нужно инициализировать его таким же образом.

$employee = $this->Employees->newEntity();
if ($this->request->is('post')) {
    $employee = $this->Employees->patchEntity($employee, $this->request->data, [
        'associated' => ['Users']
    ]);
...
Другие вопросы по тегам