Отладка save(), возвращающая false CakePHP 3.0
У меня есть некоторый код, который сломался где-то по пути, и у меня возникли проблемы с его отладкой.
Это упрощенная версия.
$data = $this->request->data;
$form = $this->Forms->get($data['id'], [
'contain' => ['FieldsForms' => ['data']
]
]);
$form = $this->Forms->patchEntity($form, $data,
['associated' => [
'FieldsForms.Data',
]
]);
if ($this->Forms->save($form)) {
// sunshine and rainbows
} else {
// wailing and gnashing of teeth
}
Я остаюсь воющим и скрежещущим зубами без каких-либо ошибок, насколько я могу судить, если я отлаживаю данные $, похоже, что все в порядке (хотя, поскольку он довольно длинный и содержит кучу идентификаторов UUID, возможно, я что-то упускаю).
Ошибки проверки пусты.
Сохранение возвращает false - любые предложения о том, как отладка это может спасти то здравомыслие, которое у меня осталось.
Спасибо!
3 answers
Проблема оказалась в данных, как и ожидалось, но не смогла увидеть сразу, потому что сохранение возвращало false, а данные были довольно большими.
Сначала я создал подмножество проблемных данных, которые отображали то же поведение, а затем, следуя предложению ndm, изменил ORM/Table.php код для функции сохранения выглядит следующим образом, чтобы можно было увидеть, в чем заключалась проблема:
$x = $entity->errors();
if ($x) {
debug($entity);
debug($x);
// if ($entity->errors()) {
return false;
}
Чтобы я мог видеть, что происходит, и продолжал исправлять данные.
Не уверен, что предыдущий ответ основан на более старой версии, но в последней версии cakephp (3.4) вы можете извлекать ошибки непосредственно из объекта $ в контроллере. Массив ошибок содержит каждое поле сущности, в котором произошел сбой, с дочерним массивом неудачных проверок.
<?php
// In Articles Controller
...
public function add(){
...
if ($this->Articles->save($article)) {
$this->Flash->success(__('The Article has been saved.'));
return $this->redirect(['action' => 'index']);
} else {
Log::Debug($article->errors());
}
Вместо изменения основного кода торта вы можете сделать следующее:
if ($this->Forms->save($form)) {
// sunshine and rainbows
} else {
//you know now what fail
$andTheErrorsAre = $entity->getErrors();
}