在CakePHP 3文档中,有关于可重用验证器的部分:https://book.cakephp.org/3.0/en/core-libraries/validation.html#creating-reusable-validators
虽然在控制器中没有说明如何使用它们。谁能举个例子?
我有一个特殊的应用程序,允许上传.csv文件。应用程序中.csv文件的验证始终相同:检查它的MIME类型,检查大小,检查扩展名等。
所以我的计划是将其作为可重复使用的验证器来实现 - 这是正确的吗?
我有UploadsController.php
upload()
函数,我想用它来验证来自表单的数据。我感到很困惑,因为我此时并未创建实体 - 而只是尝试验证我的文件 - 因此文档中的所有patchEntity()
内容都没有任何意义。
我发现关于Cake 3验证的文档非常令人困惑,因为ORM下面有一个部分(https://book.cakephp.org/3.0/en/orm/validation.html),其中说的是
验证规则在表类
中定义
但稍后,它在验证实体(https://book.cakephp.org/3.0/en/core-libraries/validation.html#validating-entities)方面有完全不同的部分。
然后我们有可重用的验证器......以及其他各种东西。
由于Cake 3中的Table和Entity模型类不同,有人可以解释如何验证文件上传之类的内容,特别是考虑到甚至可能没有表吗?
如果你在一个表单上有一个组合,你需要使用两个一个可重用的验证器(用于验证.csv这样的常见任务),以及一个单独的一套规则特定的表可能在Table模型类中?
答案 0 :(得分:4)
实际上并不那么复杂。为方便起见,在表上定义了与表有关的验证规则。它们不必在那里定义,它们可以在自定义验证类中定义,但最后表对象提供所请求的验证规则集。
验证实体是公共验证流程的一部分。由于实体是传递给表的数据集,因此它应该包含决定实体是否有效的规则的表,因为这些表是关注的。
另见
组合验证器非常简单,只需将您的自定义验证对象传递给表类中的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);
,并使用自定义验证对象规则和默认值验证您的数据/实体。
另见
除此之外,验证不依赖于模式层,它只是利用它,您可以随时使用验证对象,即如果您想手动验证数据,只需实例化验证器类并将其用于验证您的数据:
hibernate.dialect=org.hibernate.dialect.MySQLDialect //you should use mysql dialect from pom I see that you use mysql
#hibernate.default_schema=myCustomName //commented out in case you want use default schema, else you can use this property to create your custom schema
hibernate.show_sql=true //this will help so see what queries are executed
hibernate.format_sql=true //this will print formatted sql
hibernate.hbm2ddl.auto=create //this will generate database tables if they don't exist in DB, also you can change to "update" this property then database will get updates.
另见