CakePHP 3 - 如何自动显示多个新实体的表单错误?

时间:2016-09-14 00:29:39

标签: php validation cakephp cakephp-3.0

我试图利用任何自动处理验证并使用多个实体显示表单错误。

用户可以通过表单UI动态创建多个新实体。数据通过newEntities()编组:

$this->MyModel->newEntities($data);

我遇到的问题的第一部分是,为了检查任何实体上的验证是否失败,我必须通过检查每个实体来手动完成:

$errors = false;
foreach ($entities as $entity) {
    if ($entity->errors()) {
        $errors = true;
        break;
    }
}
if (!$errors) {
    // Save...

Cake是否提供了开箱即用的功能,允许您检查newEntities()是否在其任何实体上验证失败?如果没有,那就不要介意......

主要问题是我如何从各个实体获取错误,然后在相关输入旁边的表单中显示内联。

<?= $this->Form->create(); ?>

我可以传递给create()以将其链接到实体?目前似乎没有任何方式可以让它知道提交表单后会发生什么,因此不会显示错误。

我的表单输入是使用标准数组表示法创建的,其中$i来自构建所有实体的表单输入的循环。

$this->Form->hidden("MyModel.$i.field");

2 个答案:

答案 0 :(得分:2)

只需将实体数组传递给您的表单

$this->Form->create($entities);

您也不必在输入名称中指定型号名称。简单地

$this->Form->hidden("$i.field");

而不是

$this->Form->hidden("MyModel.$i.field");

答案 1 :(得分:1)

使用newEntity并将其添加到数组中。遍历该数组访问错误()。

$array = [];
$array[] = $TableRegistry->newEntity([
    'hi' => 'hey'
]);

foreach($array as $r){
    var_dump($r->errors());
}

希望这与您的用例一起使用。我从来没有使用过newEntities,但你也可以对它进行迭代?