CakePHP 3-使用可重用验证器

CakePHP 3-使用可重用验证器,php,validation,cakephp,Php,Validation,Cakephp,在CakePHP 3文档中有一节介绍了可重用验证器: 但它并没有说明如何在控制器中使用它们。有人能举个例子吗 我有一个特殊的应用程序,允许上传.csv文件。应用程序中.csv文件的验证总是相同的:检查其MIME类型、大小、扩展名等 所以我的计划是把它作为一个可重用的验证器来实现——对吗 我有一个带有upload()函数的UploadsController.php,我想用它来验证来自表单的数据。我很困惑,因为此时我并没有创建实体,而只是尝试验证我的文件,所以文档中所有这些patchEntity()

在CakePHP 3文档中有一节介绍了可重用验证器:

但它并没有说明如何在控制器中使用它们。有人能举个例子吗

我有一个特殊的应用程序,允许上传.csv文件。应用程序中.csv文件的验证总是相同的:检查其MIME类型、大小、扩展名等

所以我的计划是把它作为一个可重用的验证器来实现——对吗

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

我发现关于Cake 3验证的文档非常混乱,因为在ORM()下面有一个部分

验证规则在表类中定义

但稍后,它有一个关于验证实体()的完全不同的部分

然后我们有可重用的验证器。。。。。以及其他各种事情

由于Cake 3中的表和实体模型类不同,有人能解释一下如何验证文件上传之类的内容吗,特别是考虑到可能根本没有涉及表的情况下

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

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

验证实体是通用验证流的一部分。由于实体是传递给表的数据集,因此表应该包含决定实体是否有效的规则,因为这是表所关心的

另见

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

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

    return $validator;
}

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

    return $this->validationDefault($validator);
}
然后只需将
validate
选项配置为
customAndDefault
,即可使用自定义验证对象规则和默认规则验证数据/实体

另见

验证不绑定到模型层 除此之外,验证与模式层无关,它只是利用它,您可以随时在任何地方使用验证对象,即如果您想手动验证数据,只需实例化一个验证程序类并使用它验证您的数据:

$validator = new \App\Validation\CustomGenericValidator();
$errors = $validator->errors($data);
另见


为什么不创建一个UploadComponent来完成所有上传工作,包括验证?@RayannNayran我想了解如何使用提供的可重用验证器,但看不到如何在我的控制器中引用它。此时,我的表单提交到
UploadsController:upload()
。如果我要创建
src/Model/Validation/CsvValidator.php
那么我如何通过
UploadsController:upload()
将表单数据传递给它,并返回验证消息?感谢您的精彩解释。这比Cake文档要好得多,尤其是您提到的“验证与模型层无关”的部分——如果您阅读了一点都不清楚的Cake文档,因为它们通常谈论的是验证即将进入数据库表的数据。