加载资源

编辑该页面

警告:你浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 5.1,不再维护。

这个页面的更新版本Symf欧宝娱乐app下载地址ony 6.2(当前的稳定版本)。

加载资源

验证器组件使用元数据来验证一个值。此元数据定义了一个类,如何数组或任何其他值应进行验证。当验证一个类,类本身定义的元数据。验证简单值时,必须通过验证方法的元数据。

可以定义在一个类元数据配置文件或类本身。验证器组件收集元数据使用一组加载器。

另请参阅

您将了解如何定义元数据元数据

的StaticMethodLoader

最基本的装载机是StaticMethodLoader。这个加载程序被调用一个静态方法的元数据的类。配置的方法是使用的名称addMethodMapping ()验证器生成器的方法:

1 2 3 4 5
使用欧宝娱乐app下载地址\组件\验证器\验证;美元验证器=验证::createValidatorBuilder ()- >addMethodMapping (“loadValidatorMetadata”)- >getValidator ();

在这个例子中,验证元数据检索执行loadValidatorMetadata ()类的方法:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
使用欧宝娱乐app下载地址\组件\验证器\约束作为断言;使用欧宝娱乐app下载地址\组件\验证器\映射\ClassMetadata;用户{受保护的美元的名字;公共静态函数loadValidatorMetadata(ClassMetadata美元元数据){美元元数据- >addPropertyConstraint (“名字”,维护\ NotBlank ());美元元数据- >addPropertyConstraint (“名字”,维护\长度([“最小值”= >5,“马克斯”= >20.)));}}

提示

而不是打电话addMethodMapping ()多次添加几个方法名称,你也可以使用addMethodMappings ()设置一个数组支持的方法名称。

文件加载器

组件还提供了两个文件加载器,一个加载YAML文件和一个加载XML文件。使用addYamlMapping ()addXmlMapping ()配置这些文件的位置:

1 2 3 4 5
使用欧宝娱乐app下载地址\组件\验证器\验证;美元验证器=验证::createValidatorBuilder ()- >addYamlMapping (“验证器/ validation.yaml”)- >getValidator ();

请注意

如果你想加载YAML映射文件,那么你还需要安装Yaml组件

提示

就像映射的方法,你也可以使用addYamlMappings ()addXmlMappings ()配置文件路径的数组。

的AnnotationLoader

最后,组件提供了一个AnnotationLoader的元数据注释的类。注释被定义为@前缀类包含在doc注释块(/ * *……* /)。例如:

1 2 3 4 5 6 7 8 9 10
使用欧宝娱乐app下载地址\组件\验证器\约束作为断言;/ /……用户{/ * * *@Assert\ NotBlank * /受保护的美元的名字;}

要启用注释装载机,调用enableAnnotationMapping ()方法。它需要一个可选注释读者实例,默认主义\ \ \ AnnotationReader注释:

1 2 3 4 5
使用欧宝娱乐app下载地址\组件\验证器\验证;美元验证器=验证::createValidatorBuilder ()- >enableAnnotationMapping ()- >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
使用欧宝娱乐app下载地址\组件\验证器\验证;美元验证器=验证::createValidatorBuilder ()- >enableAnnotationMapping ()- >addMethodMapping (“loadValidatorMetadata”)- >addXmlMapping (“验证器/ validation.xml”)- >getValidator ();

缓存

使用多种加载器加载元数据从不同的地方方便,但它可以减缓你的应用程序,因为每个文件需要解析,验证和转换成一个ClassMetadata实例。

为了解决这个问题,调用setMappingCache ()方法的验证器生成器和通过自己的缓存类(必须实现PSR-6接口CacheItemPoolInterface):

1 2 3 4 5 6
使用欧宝娱乐app下载地址\组件\验证器\验证;美元验证器=验证::createValidatorBuilder ()/ /……添加加载器- >setMappingCache (SomePsr6Cache ());- >getValidator ();

请注意

加载器已经使用一个单例加载机制。这意味着加载器只会加载和解析文件,把它放在一个属性,然后使用下次请求元数据。然而,验证器仍然需要合并所有元数据的请求的时候从每一个类加载器。

使用自定义MetadataFactory

所有的加载器和缓存传递的一个实例LazyLoadingMetadataFactory。这类负责创建一个ClassMetadata实例的配置资源。

您还可以使用一个定制的元数据工厂实现通过创建一个类实现MetadataFactoryInterface。你可以设置使用这个自定义实现setMetadataFactory ():

1 2 3 4 5 6
使用Acme\验证\CustomMetadataFactory;使用欧宝娱乐app下载地址\组件\验证器\验证;美元验证器=验证::createValidatorBuilder ()- >setMetadataFactory (CustomMetadataFactory (…))- >getValidator ();

谨慎

因为你是使用一个自定义元数据工厂,你不能配置加载器和缓存使用添加*映射()方法了。你现在必须注入他们工厂自己定制的元数据。

这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。