原则 2:有没有办法使用 yaml 或 xml 从 trait 继承映射?
Posted
技术标签:
【中文标题】原则 2:有没有办法使用 yaml 或 xml 从 trait 继承映射?【英文标题】:Doctrine 2: Is there a way to inherit mapping from a trait using yaml or xml? 【发布时间】:2014-12-09 13:22:50 【问题描述】:我找到了following example in the doctrine documentation,他们在其中添加了对特征的映射:
/**
* Trait class
*/
trait ExampleTrait
/** @Id @Column(type="string") */
private $id;
/**
* @Column(name="trait_foo", type="integer", length=100, nullable=true, unique=true)
*/
protected $foo;
/**
* @OneToOne(targetEntity="Bar", cascade="persist", "merge")
* @JoinColumn(name="example_trait_bar_id", referencedColumnName="id")
*/
protected $bar;
我正在尝试映射一个特征,而不必在继承它的类中复制映射。老实说,我没有在上面尝试过,因为我当前的项目使用 yaml 进行映射,但看起来普通的 php 类在使用 trait 时也会继承映射。
有没有办法在不使用关联但使用 yaml 或 xml 的情况下继承此 trait 的映射?我尝试将 trait 设置为 mapped superclass,但没有成功,但我基本上是在寻找相同类型的想法。
谢谢。
【问题讨论】:
开箱即用。你只是忘记了@MappedSuperclass 注释。 【参考方案1】:使用 YAML 声明 mappedSupperClass:
Namespace\For\Your\MappingClass:
type: mappedSuperclass
fields:
id:
id:
type: integer
generator:
strategy: AUTO
... other fields and relations
用 XML 声明它:
<?xml version="1.0" encoding="UTF-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping
http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
<mapped-superclass name="Namespace\For\Your\MappingClass">
<field name="foo" column="foo" type="string" length="255" />
<field name="bar" column="bar" type="string" length="255" unique="true" />
... other fields
</mapped-superclass>
</doctrine-mapping>
如果您运行app/console doctrine:generate:entities
,您将能够在其他实体中使用 mappedSuperClass 作为升序。
【讨论】:
以上是关于原则 2:有没有办法使用 yaml 或 xml 从 trait 继承映射?的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法从 python 代码中获取值到 YAML 文件中
如何使用 XML 或 YAML 而非注解映射来定义 Doctrine mappedSuperclass