CakePHP 3.x не выдает ошибку валидации, когда задано «return false» - PullRequest
0 голосов
/ 03 мая 2018

Этот вопрос несколько вытекает из предыдущего вопроса, который я задавал о реализации проверки при выполнении поиска в приложении Cake 3.x: Форма поиска CakePHP 3.x с 11 различными моделями

Я читал документацию по Использование пользовательских правил проверки .

Я добавил следующее к своему Model/Table/EcsTable.php:

public function validationSearch($validator)
{
    $extra = 'Some additional value needed inside the closure';
    $validator->add('value', 'custom', [
    'rule' => function ($value, $context) use ($extra) {
        return false;
    },
    'message' => 'The title is not valid'
    ]);
    return $validator;
} 

Это копия того, что указано в документации, за исключением того, что я добавил return false, потому что я пытаюсь проверить метод проверки, выдающий ошибку.

В моем контроллере у меня есть следующее:

$ecs_entity = TableRegistry::get('Ecs')->newEntity(
$this->request->getData(),
[
    'validate' => 'search', // tells cake to use validateSearch
]
);

Я не могу получить это, чтобы вызвать ошибку проверки. Если я отправляю свою форму (чтобы данные запроса были отправлены), а затем выполняю debug($ecs_entity);, свойство errors является пустым массивом:

object(Cake\ORM\Entity) {
    'ecs' => [
        'value' => '124'
    ],
    // ...
    '[original]' => [],
    '[virtual]' => [],
    '[errors]' => [],
    '[invalid]' => [],
    '[repository]' => 'Ecs'
}

Почему это? Я планирую написать логику внутри моего замыкания внутри validationSearch, которая проверяет переданные данные. Тем не менее, я даже не могу заставить его выдавать ошибку, поэтому не зашел так далеко. Я неправильно это реализую?

В соответствии с первоначальным вопросом, я пытаюсь сделать вещи в правильном «Cake way» написании проверки. Я дошел до того, что всерьез подумываю о том, чтобы отказаться от него и просто вставить все в контроллер, потому что так утомительно передавать данные - и требует больше строк кода, когда я могу просто проверить их прямо в контроллере. ,

Как обычно, любая помощь приветствуется.

1 Ответ

0 голосов
/ 03 мая 2018

Данные, передаваемые на вызов newEntity, имеют неверный формат.

Похоже, вы проходите что-то вроде

    [
        'ecs' => [
            'value' => 123 
        ] 
    ]

Когда это должно быть:

[ 'value' => 123  ]

Вывод debug для объекта valid Ecs должен выглядеть следующим образом:

object(Cake\ORM\Entity) {

    'value' => '123',
    '[new]' => true,
    '[accessible]' => [
        '*' => true
    ],
    '[dirty]' => [
        'value' => true
    ],
    '[original]' => [],
    '[virtual]' => [],
    '[errors]' => [],
    '[invalid]' => [],
    '[repository]' => 'Esc'

}

Как видите, value является прямым свойством объекта.

Не видя вашего Form Я могу догадаться, что вы создали его как:

$this->Form->control( 'ecs.value')

вместо

$this->Form->control( 'value' );

...