访问其他帖子字段以创建复杂的验证条件

时间:2017-07-05 04:43:15

标签: php cakephp

我正在发送具有父/子关系的请求数据(最大深度为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。

1 个答案:

答案 0 :(得分:1)

使用conditional validation

从上面的链接中获取的示例:

$validator->add('picture', 'file', [
    'rule' => ['mimeType', ['image/jpeg', 'image/png']],
    'on' => function ($context) {
        return !empty($context['data']['show_profile_picture']);
    }
]);

$ context是数据,只需添加你的逻辑来检查闭包中的$ context。