0

我目前正在解析我在 zf2 中的实体文件

我有以下用于解析实体的代码:

$classname =  get_class($this->object);

$cmf = $this->em->getMetadataFactory();
$class = $cmf->getMetadataFor($classname);

$fields = $class->fieldMappings;

它返回:

array
  'id' => 
    array
      'fieldName' => string 'id' (length=2)
      'type' => string 'integer' (length=7)
      'length' => null
      'precision' => int 0
      'scale' => int 0
      'nullable' => boolean false
      'unique' => boolean false
      'id' => boolean true
      'columnName' => string 'id' (length=2)
  'artist' => 
    array
      'fieldName' => string 'artist' (length=6)
      'type' => string 'string' (length=6)
      'length' => null
      'precision' => int 0
      'scale' => int 0
      'nullable' => boolean false
      'unique' => boolean false
      'columnName' => string 'artist' (length=6)
  'title' => 
    array
      'fieldName' => string 'title' (length=5)
      'type' => string 'string' (length=6)
      'length' => null
      'precision' => int 0
      'scale' => int 0
      'nullable' => boolean false
      'unique' => boolean false
      'columnName' => string 'title' (length=5)

我想在我的列中添加一个新类型。例如,用于配置列的是 uploadfield 或 Datepicker :

/**
 * @ORM\Column(type="string")
 * @type = 'datepicker'
 */
protected $publishdate;

并在类元数据中获取该日期选择器(用于以 zend 形式创建输入元素)

有什么建议吗?

由固定

$reader = new \Doctrine\Common\Annotations\AnnotationReader();
$reflClass = new \ReflectionClass($classname);

foreach ($reflClass->getProperties() as $property) {
    var_dump($reader->getPropertyAnnotations($property));
}

和这个

namespace Admin\Model;

use Doctrine\ORM\Mapping as ORM,
    Admin\Scripts AS Scripts,
    Doctrine\ORM\Mapping\Annotation as Ano;

/**
 * @Annotation
 * @Target("PROPERTY")
 */
class sina extends \Doctrine\Common\Annotations\Annotation 
{
    /** @var string */
    public $sina;
}

/**
 * A news entity.
 *
 * @ORM\Entity
 * @ORM\Table(name="news")
 * @property string $artist
 * @property string $title
 * @property int $id
 */

class News extends Scripts\BaseObject 
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer");
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\Column(type="string")
     * @Admin\Model\sina(sina="sina")
     */
    protected $artist;

    /**
     * @ORM\Column(type="string")
     */
    protected $title;
}
4

1 回答 1

0

你能行的。您需要创建一个新的注释类。使用注解注册表注册该注解。然后您需要为 LoadClassMetadata 事件创建一个事件侦听器,并使用 Reader 类将您的额外数据插入 FieldMappings。

该库的部分内容非常未完成且损坏,但请查看 Readonly 目录。它显示了如何读取和插入新注释(在这种情况下,它将字段标记为只读 - 即不允许对该字段进行更新)。SdsDoctrineExtensions

于 2012-05-18T04:20:04.563 回答