PropertyInfo组件
编辑该页面警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 3.3,不再维护。
读这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。
PropertyInfo组件
PropertyInfo组件允许您获取信息类属性通过使用不同来源的元数据。
而PropertyAccess组件可以读取和写入值/从对象和数组,PropertyInfo组件工作只与类定义提供信息的数据类型和可见性——包括通过getter或setter方法——在这个类的属性。
安装
你可以安装组件在两种不同的方式:
- 安装它通过作曲家(
ob娱乐下载symfony / property-info
在Packagist); - 使用官方的Git存储库(https://github.com/ob娱乐下载symfony/property-info)。
然后,需要供应商/ autoload.php
文件,使作曲家提供的半自动的机制。否则,您的应用程序无法找到这个Symfony组件的类。ob娱乐下载
对一些可能需要额外的依赖关系该组件提供的提取器。
使用
使用这个组件,创建一个新的PropertyInfoExtractor实例和为它提供一组信息提取器。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27 28 29 30 31
使用ob娱乐下载\组件\PropertyInfo\PropertyInfoExtractor;使用ob娱乐下载\组件\PropertyInfo\器\PhpDocExtractor;使用ob娱乐下载\组件\PropertyInfo\器\ReflectionExtractor;使用例子\名称空间\YourAwesomeCoolClass;/ /提取器进一步所示的完整列表美元phpDocExtractor=新PhpDocExtractor ();美元reflectionExtractor=新ReflectionExtractor ();/ / PropertyListExtractorInterface的数组美元listExtractors=数组(美元reflectionExtractor);/ / PropertyTypeExtractorInterface的数组美元typeExtractors=数组(美元phpDocExtractor,美元reflectionExtractor);/ / PropertyDescriptionExtractorInterface的数组美元descriptionExtractors=数组(美元phpDocExtractor);/ / PropertyAccessExtractorInterface的数组美元accessExtractors=数组(美元reflectionExtractor);美元propertyInfo=新PropertyInfoExtractor (美元listExtractors,美元typeExtractors,美元descriptionExtractors,美元accessExtractors);/ /示例,请参阅下面的内容美元类= YourAwesomeCoolClass::类;美元属性=美元propertyInfo- >getproperty (美元类);
器命令
器实例数组内的顺序是非常重要的:第一个非空将返回结果。这就是为什么你必须提供每个类别提取器作为一个单独的数组,即使一个器提供了多个类别信息。
例如,虽然ReflectionExtractor和DoctrineExtractor提供列表和类型信息更好的方法可能是:
- 的ReflectionExtractor优先级列表信息,所有属性在类返回(不仅仅是映射属性)。
- 的DoctrineExtractor有优先考虑的类型信息,所以实体元数据是用来代替类型提示提供更准确的类型信息。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
使用ob娱乐下载\桥\学说\PropertyInfo\DoctrineExtractor;使用ob娱乐下载\组件\PropertyInfo\器\ReflectionExtractor;使用ob娱乐下载\组件\PropertyInfo\PropertyInfoExtractor;美元reflectionExtractor=新ReflectionExtractor ();美元doctrineExtractor=新DoctrineExtractor (/ *……* /);美元propertyInfo=新PropertyInfoExtractor (/ /列表提取器数组(美元reflectionExtractor,美元doctrineExtractor),/ /类型提取器数组(美元doctrineExtractor,美元reflectionExtractor));
可推断出的信息
的PropertyInfoExtractor类公开公共方法提取四种类型的信息:
- * *的属性列表:“getproperty ()”
- 属性*类型*:“getTypes ()”
- 属性*描述*:“getShortDescription()”和“getLongDescription ()”
- 属性*访问*细节:“isReadable()”和“isWritable ()”
请注意
一定要通过类器的方法名称,而不是一个对象:
1 2 3 4 5 6 7
/ /坏!它可以工作,但不是所有提取器美元propertyInfo- >getproperty (美元awesomeObject);/ /好!美元propertyInfo- >getproperty (get_class (美元awesomeObject));美元propertyInfo- >getproperty (的例子\ \ YourAwesomeClass名称空间);美元propertyInfo- >getproperty (YourAwesomeClass::类);
列表信息
提取器实现PropertyListExtractorInterface提供可用的属性列表类,包含每个属性名称作为一个字符串数组。
1 2 3 4 5 6 7 8 9 10
美元属性=美元propertyInfo- >getproperty (美元类);/ *例子的结果- - - - - - - - - - - - - - - -(3)数组{[0]= >字符串(8)“用户名”[1]= >字符串(8)“密码”[2]= >字符串(6)“活跃”}* /
类型信息
提取器实现PropertyTypeExtractorInterface提供大量的数据类型信息的财产。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
美元类型=美元propertyInfo- >getTypes (美元类,美元财产);/ *例子的结果- - - - - - - - - - - - - - - -数组(1){[0]= >类Symfoob娱乐下载ny \ PropertyInfo \ \组件类型(6){私人builtinType美元= >字符串(6)“字符串”私人nullable美元= > bool (false)私人类= >零私人收藏美元= > bool (false)私人collectionKeyType = >零私人collectionValueType美元= >零}}* /
看到PropertyInfo组件对于信息类型
类。
描述信息
提取器实现PropertyDescriptionExtractorInterface提供长期和短期的描述从一个属性注释字符串。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
美元标题=美元propertyInfo- >getShortDescription (美元类,美元财产);/ *例子的结果- - - - - - - - - - - - - - - -字符串(41)“这是第一行DocComment。”* /美元段=美元propertyInfo- >getLongDescription (美元类,美元财产);/ *例子的结果- - - - - - - - - - - - - - - -字符串(79):这些是DocComment随后的段落。它可以跨越多个行。* /
访问信息
提取器实现PropertyAccessExtractorInterface提供属性是否可读可写的是布尔值。
1 2 3 4 5
美元propertyInfo- >isReadable (美元类,美元财产);/ /例结果:bool(真正的)美元propertyInfo- >isWritable (美元类,美元财产);/ /例结果:bool(假)
的ReflectionExtractor寻找getter /伊塞/ setter方法除了公共财产来确定是否访问。基于这样的PropertyAccess的工作原理。
类型的对象
相比其他提取器,类型信息提取器提供更多的信息比可以表示成简单的标量值。由于这个原因,类型提取器返回的数组类型支持对象为每种类型的属性。
例如,如果一个属性既支持整数
和字符串
(通过@return int |字符串
注释),PropertyInfoExtractor: getTypes ()将返回一个数组,其中包含吗两个的实例类型类。
请注意
大多数萃取器将返回只有一个类型实例。的PhpDocExtractor是目前唯一器数组中返回多个实例。
每个对象将提供6属性,可用的方法:6
类型::getBuiltInType ()
的类型::getBuiltinType ()方法将返回PHP内置的数据类型,它可以9可能的字符串值之一:数组
,bool
,可调用的
,浮动
,int
,零
,对象
,资源
或字符串
。
常量在类型类,在表单中类型::BUILTIN_TYPE_ *
,提供了方便。
类型::isNullable ()
的类型::isNullable ()方法将返回一个布尔值,指示是否可以设置为属性参数零
。
类型::getClassName ()
如果PHP的内置数据类型是对象
,类型::getClassName ()方法将返回接受完全限定的类或接口的名称。
类型::isCollection ()
的类型::isCollection ()方法将返回一个布尔值表示如果属性参数是一个集合包含其他值——一种基本价值的能力。目前这返回真正的
如果:
- 的PHP的内置数据类型是
数组
,或 - mutator方法属性来源于有前缀
添加
或删除
(定义为前缀数组赋值函数的列表)。
类型::getCollectionKeyType() &类型:getCollectionValueType ()
如果属性是一个集合,其他类型对象可能是返回的键和值类型的集合(如果可用)的信息,通过类型::getCollectionKeyType ()和类型::getCollectionValueType ()方法。
提取器
执行财产信息的提取器类。一个提取类可以提供一个或多个类型的属性信息通过实施正确的接口(s)。
的PropertyInfoExtractor将迭代相关器类的顺序与它们的集合,调用适当的方法并返回第一个结果,不是吗零
。
虽然您可以创建自己的提取器,以下是已经可以覆盖大部分用例:
ReflectionExtractor
使用PHP反射,ReflectionExtractor提供列表,从setter和取值方法类型和访问信息。它还可以提供返回和标量类型为PHP 7 +。
请注意
当使用Symfony框架,这个ob娱乐下载服务时自动注册property_info
功能启用:
1 2 3 4
# app / config / config.yml框架:property_info:启用:真正的
1 2 3 4 5 6 7 8 9 10 11
使用ob娱乐下载\组件\PropertyInfo\器\ReflectionExtractor;美元reflectionExtractor=新ReflectionExtractor ();/ /列表信息。美元reflectionExtractor- >getproperty (美元类);/ /类型信息。美元reflectionExtractor- >getTypes (美元类,美元财产);/ /获取信息。美元reflectionExtractor- >isReadable (美元类,美元财产);美元reflectionExtractor- >isWritable (美元类,美元财产);
PhpDocExtractor
请注意
这个提取器依赖于phpdocumentor / reflection-docblock图书馆。
使用phpDocumentor反射解析属性和方法的注释,PhpDocExtractor提供类型和描述信息。这个提取器是自动注册property_info
在Symfonob娱乐下载y框架如果依赖库。
1 2 3 4 5 6 7 8 9
使用ob娱乐下载\组件\PropertyInfo\器\PhpDocExtractor;美元phpDocExtractor=新PhpDocExtractor ();/ /类型信息。美元phpDocExtractor- >getTypes (美元类,美元财产);/ /描述信息。美元phpDocExtractor- >getShortDescription (美元类,美元财产);美元phpDocExtractor- >getLongDescription (美元类,美元财产);
SerializerExtractor
请注意
这个提取器依赖于ob娱乐下载symfony /序列化器图书馆。
使用组元数据从序列化器组件,SerializerExtractor提供列表信息。这个提取器不自动注册的property_info
服务在Symfony框架。ob娱乐下载
1 2 3 4 5 6 7 8 9 10 11 12
使用学说\常见的\注释\AnnotationReader;使用ob娱乐下载\组件\PropertyInfo\器\SerializerExtractor;使用ob娱乐下载\组件\序列化器\映射\工厂\ClassMetadataFactory;使用ob娱乐下载\组件\序列化器\映射\加载程序\AnnotationLoader;美元serializerClassMetadataFactory=新ClassMetadataFactory (新AnnotationLoader (新AnnotationReader));美元serializerExtractor=新SerializerExtractor (美元serializerClassMetadataFactory);/ /列表信息。美元serializerExtractor- >getproperty (美元类);
DoctrineExtractor
请注意
这个提取器依赖于ob娱乐下载symfony / doctrine-bridge和教义/ orm库。
使用实体映射数据教义ORM,DoctrineExtractor提供列表和类型信息。这个提取器是不会自动注册的property_info
服务在Symfony框架。ob娱乐下载
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
使用学说\ORM\EntityManager;使用学说\ORM\工具\设置;使用ob娱乐下载\桥\学说\PropertyInfo\DoctrineExtractor;美元配置=设置::createAnnotationMetadataConfiguration ([__DIR__),真正的);美元entityManager= EntityManager::创建([“司机”= >“pdo_sqlite”,/ /……),美元配置);美元doctrineExtractor=新DoctrineExtractor (美元entityManager- >getMetadataFactory ());/ /列表信息。美元doctrineExtractor- >getproperty (美元类);/ /类型信息。美元doctrineExtractor- >getTypes (美元类,美元财产);
创建自己的公司
您可以创建自己的属性信息提取器通过创建一个类实现一个或多个以下接口:PropertyAccessExtractorInterface,PropertyDescriptionExtractorInterface,PropertyListExtractorInterface和PropertyTypeExtractorInterface。
(如果已启用FrameworkBundle PropertyInfo组件,您可以自动注册你的器类的property_info
通过定义它作为一个服务与一个或多个以下标签:
property_info.list_extractor
如果它提供列表信息。property_info.type_extractor
如果它提供类型信息。property_info.description_extractor
如果它提供描述信息。property_info.access_extractor
如果它提供访问信息。