霜冻22 / 实体元数据读取器
封装在 Doctrine 注解解析器周围。
dev-master
2013-11-26 11:29 UTC
Requires
- php: >= 5.3.0
- doctrine/orm: 2.*
- nette/nette: 2.*
This package is not auto-updated.
Last update: 2024-09-23 15:05:23 UTC
README
版本 Alpha
通过 Doctrine/Annotations 扩展实体支持自定义注解。
EntityReader
基本对象是 EntityReader,它接受 Doctrine\Common\Annotations\Reader 的实例。然后,该对象为给定实体的每个属性返回一个 ColumnReader 对象数组。
ColumnReader
表示实体属性的对象。该对象允许您获取表示特定注解的对象,并且可以使用它获取有关该属性的详细信息。
- getAnnotation(...) - 基本方法,返回指定的注解,如果不存在,则可以创建具有默认值的注解
- isValueType() - 如果属性是表示某种值的列,则返回 TRUE,即具有 Column 注解
- isEntityType() - 如果属性是其他实体的引用(即一对一、多对一关系),则返回 TRUE
- isCollectionType() - 如果属性是实体集合(即多对多、一对多关系),则返回 TRUE
- getTargetEntity() - 如果属性是其他实体的引用,则返回该目标实体的名称
整个对象实现了 Iterator 接口,因此可以在其上进行迭代,从而遍历属性的每个注解。
映射
库包含表示注解的几个基本对象
-
Access - 代表定义属性访问的注解的对象 - 写入/读取属性,例如可用于生成的数据网格、表单等。
-
Name - 属性的简单人类可读名称,例如用于数据网格列标题、表单标签等。
使用示例
use EntityMetaReader\Mapping as EMR; use Doctrine\ORM\Mapping as ORM; class Product extends \Ale\Entities\IdentifiedEntity { /** * @EMR\Name("Název produktu") * @ORM\Column(type="string") * @var string */ protected $name; /** * @EMR\Name("Provize") * @EMR\Access(read="admin", write=false) * @ORM\Column(type="integer") * @var int */ protected $commission; /** * @EMR\Access(read=false) * @ORM\Column(type="integer") * @var int */ protected $someInternal; } $user = new Nette\Security\User(...); $reader = new EntityReader(...); $columns = $reader->getEntityColumns("Product"); foreach ($columns as $columnReader) { $access = $columnReader->getAnnotation('EntityMetaReader\Mapping\Access', TRUE); /** @var EntityMetaReader\Mapping\Access $access */ echo $access->checkReadAccess($user); // Může uživatel číst property echo $access->checkWriteAccess($user); // Může uživatel zapisovat property $name = $column->getAnnotation('EntityMetaReader\Mapping\Name', TRUE, $columnReader->getName()); /** @var EntityMetaReader\Mapping\Name */ echo $name; // Vypiš human-read název property, pokud není vytvoří objekt Name s defaultní hodnotou názvu property }