加载资源
编辑该页面加载资源
验证器组件使用元数据来验证一个值。此元数据定义了一个类,如何数组或任何其他值应进行验证。当验证一个类,类本身定义的元数据。验证简单值时,必须通过验证方法的元数据。
可以定义在一个类元数据配置文件或类本身。验证器组件收集元数据使用一组加载器。
另请参阅
您将了解如何定义元数据元数据。
的StaticMethodLoader
最基本的装载机是StaticMethodLoader。这个加载程序被调用一个静态方法的元数据的类。配置的方法是使用的名称addMethodMapping ()验证器生成器的方法:
1 2 3 4 5
使用ob娱乐下载\组件\验证器\验证;美元验证器=验证::createValidatorBuilder ()- >addMethodMapping (“loadValidatorMetadata”)- >getValidator ();
在这个例子中,验证元数据检索执行loadValidatorMetadata ()
类的方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
使用ob娱乐下载\组件\验证器\约束作为断言;使用ob娱乐下载\组件\验证器\映射\ClassMetadata;类用户{受保护的字符串美元的名字;公共静态函数loadValidatorMetadata(ClassMetadata美元元数据):无效{美元元数据- >addPropertyConstraint (“名字”,新维护\ NotBlank ());美元元数据- >addPropertyConstraint (“名字”,新维护\长度([“最小值”= >5,“马克斯”= >20.)));}}
提示
而不是打电话addMethodMapping ()
多次添加几个方法名称,你也可以使用addMethodMappings ()设置一个数组支持的方法名称。
文件加载器
组件还提供了两个文件加载器,一个加载YAML文件和一个加载XML文件。使用addYamlMapping ()或addXmlMapping ()配置这些文件的位置:
1 2 3 4 5
使用ob娱乐下载\组件\验证器\验证;美元验证器=验证::createValidatorBuilder ()- >addYamlMapping (“验证器/ validation.yaml”)- >getValidator ();
请注意
如果你想加载YAML映射文件,那么您还需要安装Yaml组件。
提示
就像映射的方法,你也可以使用addYamlMappings ()和addXmlMappings ()配置文件路径的数组。
的AnnotationLoader
最后,组件提供了一个AnnotationLoader的元数据注释的类。注释被定义为@
前缀类包含在doc注释块(/ * *……* /
)。例如:
1 2 3 4 5 6 7 8 9 10
使用ob娱乐下载\组件\验证器\约束作为断言;/ /……类用户{/ * * *@Assert\ NotBlank * /受保护的字符串美元的名字;}
要启用注释装载机,调用enableAnnotationMapping ()方法。如果你使用注释而不是属性,它也需要电话addDefaultDoctrineAnnotationReader ()
使用原则的注释读者:
1 2 3 4 5 6
使用ob娱乐下载\组件\验证器\验证;美元验证器=验证::createValidatorBuilder ()- >enableAnnotationMapping ()- >addDefaultDoctrineAnnotationReader ()/ /添加这个只有当使用注释- >getValidator ();
禁用启用注释加载程序后,电话disableAnnotationMapping ()。
请注意
为了使用注释装载机,你应该安装了教义/注释
和教义/缓存
包与作曲家。
提示
注释的类不自动加载,所以你必须使用类加载器加载它们是这样的:
1 2 3 4 5 6 7 8 9
使用作曲家\自动装载\类加载器;使用学说\常见的\注释\AnnotationRegistry;/ * *@var类加载器加载程序* /美元美元加载程序=需要__DIR__。“/ . . /供应商/ autoload.php”;AnnotationRegistry::registerLoader ([美元加载程序,“loadClass”]);返回美元加载程序;
使用多个加载器
该组件提供了一个LoaderChain类执行几个顺序装入器在相同的顺序与它们的定义:
的ValidatorBuilder
将已经照顾这个当你配置多个映射:
1 2 3 4 5 6 7 8
使用ob娱乐下载\组件\验证器\验证;美元验证器=验证::createValidatorBuilder ()- >enableAnnotationMapping (真正的)- >addDefaultDoctrineAnnotationReader ()- >addMethodMapping (“loadValidatorMetadata”)- >addXmlMapping (“验证器/ validation.xml”)- >getValidator ();
缓存
使用多种加载器加载元数据从不同的地方方便,但它可以减缓你的应用程序,因为每个文件需要解析,验证和转换成一个ClassMetadata实例。
为了解决这个问题,调用setMappingCache ()方法的验证器生成器和通过自己的缓存类(必须实现PSR-6接口CacheItemPoolInterface):
1 2 3 4 5 6
使用ob娱乐下载\组件\验证器\验证;美元验证器=验证::createValidatorBuilder ()/ /……添加加载器- >setMappingCache (新SomePsr6Cache ())- >getValidator ();
请注意
加载器已经使用一个单例加载机制。这意味着加载器只会加载和解析文件,把它放在一个属性,然后使用下次请求元数据。然而,验证器仍然需要合并所有元数据的请求的时候从每一个类加载器。
使用自定义MetadataFactory
所有的加载器和缓存传递的一个实例LazyLoadingMetadataFactory。这类负责创建一个ClassMetadata
实例的配置资源。
您还可以使用一个定制的元数据工厂实现通过创建一个类实现MetadataFactoryInterface。你可以设置使用这个自定义实现setMetadataFactory ():
1 2 3 4 5 6
使用Acme\验证\CustomMetadataFactory;使用ob娱乐下载\组件\验证器\验证;美元验证器=验证::createValidatorBuilder ()- >setMetadataFactory (新CustomMetadataFactory (…))- >getValidator ();
谨慎
因为你是使用一个自定义元数据工厂,你不能配置加载器和缓存使用添加*映射()
方法了。你现在必须注入他们工厂自己定制的元数据。