霜冻22/实体元数据读取器

封装在 Doctrine 注解解析器周围。

dev-master 2013-11-26 11:29 UTC

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

}