加载资源
编辑本页警告:您正在浏览的文档欧宝官网下载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 ();
谨慎
方法配置加载器和缓存,因为您使用的是自定义元数据工厂添加*映射()
方法了。现在必须自己将它们注入自定义元数据工厂。