加载资源

编辑本页

警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 4.3,现已不再维护。

本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。

加载资源

Validator组件使用元数据来验证值。这个元数据定义了类、数组或任何其他值应该如何验证。在验证类时,元数据由类本身定义。在验证简单值时,必须将元数据传递给验证方法。

类元数据可以在配置文件中定义,也可以在类本身中定义。Validator组件使用一组加载器收集元数据。

另请参阅

中定义元数据元数据

的StaticMethodLoader

最基本的加载器是StaticMethodLoader.这个加载器通过调用类的静态方法来获取元数据。方法配置方法的名称addMethodMapping ()验证器构建器的方法:

1 2 3 4 5
使用ob娱乐下载组件验证器验证验证器=验证::createValidatorBuilder ()->addMethodMapping (“loadValidatorMetadata”)->getValidator ();

在本例中,验证元数据是执行loadValidatorMetadata ()类的方法:

12 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从类的注释中获取元数据。注释的定义如下@文档块注释中包含的前缀类(/ * *……* /).例如:

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

要启用注释加载器,请调用enableAnnotationMapping ()方法。它接受一个可选的注释读取器实例,默认为主义\ \ \ AnnotationReader注释

1 2 3 4 5
使用ob娱乐下载组件验证器验证验证器=验证::createValidatorBuilder ()->enableAnnotationMapping ()->getValidator ();

要在启用注释加载器后禁用注释加载器,请调用disableAnnotationMapping ()

请注意

为了使用注释加载器,您应该安装教义/注释而且教义/缓存使用Composer打包。

提示

注释类不会自动加载,所以你必须像这样使用类加载器加载它们:

1 2 3 4 5 6 7 8 9
使用作曲家自动装载类加载器使用学说常见的注释AnnotationRegistry/**@varClassLoader $loader */加载程序需要__DIR__“/ . . /供应商/ autoload.php”;AnnotationRegistry::registerLoader ([加载程序“loadClass”]);返回加载程序

使用多个加载器

组件提供一个LoaderChain类以相同的定义顺序依次执行多个加载器:

ValidatorBuilder当你配置多个映射时,已经会考虑到这一点:

1 2 3 4 5 6 7
使用ob娱乐下载组件验证器验证验证器=验证::createValidatorBuilder ()->enableAnnotationMapping ()->addMethodMapping (“loadValidatorMetadata”)->addXmlMapping (“验证器/ validation.xml”)->getValidator ();

缓存

使用许多加载器从不同的地方加载元数据很方便,但它会减慢应用程序的速度,因为每个文件都需要解析、验证并转换为一个文件ClassMetadata实例。

要解决此问题,请调用setMetadataCache ()方法,并传递您自己的缓存类(必须实现CacheInterface):

1 2 3 4 5 6
使用ob娱乐下载组件验证器验证验证器=验证::createValidatorBuilder ()/ /……添加加载器->setMetadataCache (SomeImplementCacheInterface ());->getValidator ();

请注意

加载器已经使用了单例加载机制。这意味着加载器只加载和解析一次文件,并将其放入属性中,然后在下次请求元数据时使用该属性。但是,Validator在被请求时仍然需要合并来自每个加载器的一个类的所有元数据。

使用自定义元数据工厂

的实例传递所有加载器和缓存LazyLoadingMetadataFactory.类用于创建ClassMetadata实例中的所有已配置资源。

您还可以通过创建实现的类来使用自定义元数据工厂实现MetadataFactoryInterface.您可以使用setMetadataFactory ()

1 2 3 4 5 6
使用Acme验证CustomMetadataFactory使用ob娱乐下载组件验证器验证验证器=验证::createValidatorBuilder ()->setMetadataFactory (CustomMetadataFactory(…))->getValidator ();

谨慎

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

此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。