CakePHP 3-使用可重用的验证器

And*_*ndy 3 php validation cakephp

在CakePHP 3文档中,有一个关于可重用验证器的部分:https : //book.cakephp.org/3.0/en/core-libraries/validation.html#creating-reusable-validators

它并没有说您如何在Controller中使用它们。谁能举个例子?

我有一个特定的应用程序,它可以上传.csv文件。应用程序中.csv文件的验证始终是相同的:检查其MIME类型,检查大小,检查扩展名等。

所以我的计划是将其实现为可重用的验证器-正确吗?

我有一个UploadsController.phpwith upload()函数,在这里我想用它来验证来自表单的数据。我很困惑,因为此时我还没有创建实体-而是只是尝试验证我的文件-因此patchEntity()文档中的所有这些内容在这里毫无意义。

我发现Cake 3验证的文档非常混乱,因为ORM(https://book.cakephp.org/3.0/en/orm/validation.html)下有一个部分,上面写着

验证规则在Table类中定义

但是稍后,它在验证实体https://book.cakephp.org/3.0/en/core-libraries/validation.html#validating-entities)中有一个完全不同的部分。

然后,我们有了可重用的验证器.....以及其他各种东西。

由于Cake 3中的表和实体模型类有所不同,有人可以解释一下如何验证文件上传之类的东西,特别是考虑到甚至根本不涉及任何表时

还有,如果您在表单上有一个组合,需要使用可重用的验证器(用于执行诸如验证.csv之类的常见任务),又需要使用特定于表模型类的特定表的单独规则集,该怎么办? ?

ndm*_*ndm 5

表提供合同

实际上并不那么复杂。为了方便起见,在表上定义了与表有关的验证规则。它们不必在那里定义,可以在自定义验证类中定义,但是最后表对象提供了请求的验证规则集。

验证实体是常见验证流程的一部分。由于实体是传递到表的数据集,因此表应包含决定实体是否有效的规则,因为这是表所关注的。

也可以看看

继承验证规则

组合验证器非常简单,只需将自定义验证对象传递到validation*()表类中的方法即可,该表类提供了您要继承的规则,大致如下:

public function validationDefault(Validator $validator)
{
    $validator
        ->add(/* ... */);

    return $validator;
}

public function validationCustomAndDefault()
{
    $validator = new \App\Model\Validation\CustomModelValidator();

    return $this->validationDefault($validator);
}
Run Code Online (Sandbox Code Playgroud)

然后,只需将validate选项配置为customAndDefault,即可使用自定义验证对象规则和默认规则来验证您的数据/实体。

也可以看看

验证不依赖于模型层

除此之外,验证不依赖于模式层,它只是利用它,您可以随时随地使用验证对象,即,如果您想手动验证数据,只需实例化一个验证器类并使用它来验证数据:

$validator = new \App\Validation\CustomGenericValidator();
$errors = $validator->errors($data);
Run Code Online (Sandbox Code Playgroud)

也可以看看