Модель возвращает мне ошибку «_required» в поле, что это не пустой торт php 3.8

#php #cakephp #cakephp-3.0

#php #cakephp #cakephp-3.0

Вопрос:

Я использую cakephp 3.8 и хочу сохранить свою сущность в таблице сеансов, но модель возвращает мне ошибку, которую я не понимаю, потому что, как вы можете видеть на скриншоте, мое поле «is_active» не пустое, ее значение равно true.

введите описание изображения здесь

И это мои правила проверки в моей модели :

     public function validationDefault(Validator $validator)
{
    $validator
        ->integer('id')
        ->allowEmpty('id', 'create');

    $validator
        ->scalar('name')
        ->maxLength('name', 255)
        ->requirePresence('name', 'create')
        ->notEmpty('name');

    $validator
        ->boolean('is_active')
        ->requirePresence('is_active', 'create')
        ->notEmpty('is_active');

    return $validator;
}
 

И это мой код :

 $session = $this->Sessions->newEntity(['session_state_id' => 'OPENED', 'section_id' => $section_id, 'is_active' => true]);
$this->Sessions->patchEntity($session, $this->getRequest()->getData());
$this->Sessions->save($session);
 

Большое вам спасибо за вашу помощь,

Loic

Комментарии:

1. Можете ли вы показать нам все правила проверки is_active , связанные с вашим кодом модели?

2. @GregSchmidt Да, я обновил свой пост

3. Откуда мы знаем, что это поле действительно было частью исправленных данных? Как выглядит код, который создает объект? ps, пожалуйста, старайтесь избегать публикации кода в виде изображений — спасибо!

4. @ndm Поскольку я ставлю это непосредственно, когда объявляю свою сущность, я отредактировал свой пост с помощью кода. Как вы можете видеть, мое свойство «is_active» является частью моей сущности

5. Это часть вашей сущности, но не обязательно часть ваших исправленных данных, т. Е., Вероятно, ее нет в $this->getRequest()->getData() ? Это имело бы смысл, если бы на самом деле было невозможно исправить это из пользовательских данных, но это вызвало бы проблему, которую вы показываете.

Ответ №1:

Вы исправляете дважды выше, ошибка запускается вашим 2-м, «patchEntity ()». Исправьте свой код, я бы сказал, чтобы не исправлять дважды, или включать поле в свои данные, или корректировать правила проверки.

В общем, всегда исправляйте только один раз для каждого типа «создать» против «редактировать». Итак, выше, вы должны делать:

 $data = $this->getRequest()->getData();
$data['is_active'] = true; // add fields on top for the same marshalling.
...

$session = $this->Sessions->newEntity($data);
$result = $this->Sessions->save($session);
 

Альтернатива для действий по созданию (когда требуется объект для построения формы):

 $session = $this->Sessions->newEmptyEntity(); // this one doesn't patch.
$ession->is_active = true; // Add fields directly (no validation)

$data = $this->getRequest()->getData();
$data['...'] = ... // If needed for validation

$session = $this->Sessions->patchEntity($session, $data);
$result = $this->Sessions->save($session);
 

Причина здесь в вашем случае:
Вы устанавливаете правило «при создании» для проверки.
Но независимо от того, как часто вы исправляете, он все равно не сохраняется, поэтому одно и то же правило проверки запускается снова и снова.