Ric*_*bbs 7 debugging cakephp save 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
}
Run Code Online (Sandbox Code Playgroud)
我没有任何错误就哭了,咬牙切齿,据我所知,如果我调试$ data它看起来没问题(虽然因为它很长并包含一堆UUID,所以我可能会遗漏一些东西).
验证错误是空的.
保存返回false - 任何关于如何调试它的建议都可以保存我留下的理智.
谢谢!
Ric*_*bbs 15
问题原来是数据,正如预期的那样,但由于保存返回错误且数据非常大,因此无法立即看到.
我首先制作了一个问题数据的子集,显示了相同的行为,然后根据ndm的建议,更改了保存函数的ORM/Table.php代码,如下所示,以便能够看到问题所在:
$x = $entity->errors();
if ($x) {
debug($entity);
debug($x);
// if ($entity->errors()) {
return false;
}
Run Code Online (Sandbox Code Playgroud)
这样我就可以看到发生了什么,然后继续修复数据.
小智 5
不确定较早的答案是否基于旧版本,但在最新的 cakephp 版本 (3.4) 中,您可以直接从控制器中的 $entity 检索错误。errors 数组包含每个失败的实体字段,以及失败验证的子数组。
<?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());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11418 次 |
| 最近记录: |