I have some code which has broken somewhere along the way and I'm having trouble debugging it.
This is a simplified version of it.
$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
}
I'm left wailing and gnashing teeth without any errors, as far as I can see if I debug the $data it looks like it's ok (though since it's fairly long and contains a bunch of UUIDs it's possible I'm missing something).
Validation errors is empty.
The save is returning false - any suggestions on how to debug this might save what sanity I have left.
Thanks!
The problem turned out to be the data, as expected but couldn't see immediately because the save was returning false and the data was quite large.
I first made a subset of the problem data which displayed the same behaviour then, following ndm's suggestion, changed the ORM/Table.php code for the save function as follows to be able to see where the problem was:
// $entity->errors() is deprecated as of CakePHP 3.7
// $entity->getErrors() should be used in later versions
$x = $entity->errors();
if ($x) {
debug($entity);
debug($x);
return false;
}
So that I could see what was going on and went on to fix the data.
Not sure if the earlier answer is based on an older version, but in the latest cakephp version (3.4) you can retrieve the errors directly from the $entity within the controller. The errors array contains each entity field that failed, with a child array of failed validations.
<?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 you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With