我正在发送具有父/子关系的请求数据(最大深度为1级)。所以parent_id
在表格中引用自己作为fk。
debug($this->request->getData())
收益:
[
"activities": [
[
"name": "Parent Activity",
"id": 3,
"parent_id": null,
"quantity": null,
],
[
"name": "Child Activity",
"id": 4,
"parent_id": 3,
"quantity" :5
],
[
"name": "Parent Activity 2",
"id": 7,
"parent_id": null,
"quantity": null,
],
]
]
我想创建一个验证规则,它将强制没有子节点的父活动(parent_id指向它们的节点)填充quantity"
(这可以是任意字段,我还有其他一些字段)
我能想到的最直接的方法是循环/操作请求数据并对其进行标记,但有没有一种很好的Cake方式来执行此操作并可能在验证中?
$data = $this->request->getData();
$collection = new \Cake\Collection\Collection($data);
// filter / map所以我可以创建一个新的键来计算子节点数,从而操纵数据:
[
"activities": [
[
"name": "Parent Activity",
"id": 3,
"parent_id": null,
"quantity": null,
"children": 1
],
[
"name": "Child Activity",
"id": 4,
"parent_id": 3,
"quantity" :5
],
[
"name": "Parent Activity 2",
"id": 7,
"parent_id": null,
"quantity": null,
"children": 0
],
]
]
然后我可以使用孩子作为验证中的条件而不是更复杂的条件。虽然操纵请求数据似乎并不干净。接受任何其他建议。
使用Cake3。
答案 0 :(得分:1)
从上面的链接中获取的示例:
$validator->add('picture', 'file', [
'rule' => ['mimeType', ['image/jpeg', 'image/png']],
'on' => function ($context) {
return !empty($context['data']['show_profile_picture']);
}
]);
$ context是数据,只需添加你的逻辑来检查闭包中的$ context。