[英]Symfony 4 how to implement Doctrine XML ORM mapping
Symfony 4 document is unclear about how to use XML orm mapping instead of annotations. Symfony 4 文档不清楚如何使用 XML orm 映射而不是注释。 It's rather frustrating to see no details for such important part in official documentation.
在官方文档中没有看到如此重要部分的细节令人沮丧。
Imagine YourDomain\\Entity\\Customer
domain object:想象一下
YourDomain\\Entity\\Customer
域对象:
<?php declare(strict_types=1);
namespace YourDomain\Entity;
class Customer
{
private $id;
private $email;
private $password;
public function __construct(string $email)
{
$this->setEmail($email);
}
public function getId(): ?int
{
return $this->id;
}
public function getEmail(): string
{
return $this->email;
}
public function setEmail(string $email): void
{
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
throw new \InvalidArgumentException('Not a valid e-mail address');
}
$this->email = $email;
}
public function getPassword(): ?string
{
return $this->password;
}
public function setPassword(?string $password): void
{
$this->password = $password;
}
}
Define your own mapping first:首先定义您自己的映射:
orm:
mappings:
YourDomain\Entity:
is_bundle: false
type: xml
// this is the location where xml files are located, mutatis mutandis
dir: '%kernel.project_dir%/../src/Infrastructure/ORM/Mapping'
prefix: 'YourDomain\Entity'
alias: YourDomain
File name has to match the pattern [class_name].orm.xml
, in your case Customer.orm.xml
.文件名必须与模式
[class_name].orm.xml
,在您的情况下为Customer.orm.xml
。 If you have sub-namespaces inside, eg.如果您在内部有子命名空间,例如。 value object
YourDomain\\Entity\\ValueObject\\Email
, the file has to be named ValueObject.Email.orm.xml
.值对象
YourDomain\\Entity\\ValueObject\\Email
,该文件必须命名为ValueObject.Email.orm.xml
。
Example mapping:示例映射:
<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
https://raw.github.com/doctrine/doctrine2/master/doctrine-mapping.xsd">
<entity name="YourDomain\Entity\Customer" table="customer">
<id name="id" type="integer" column="id">
<generator strategy="AUTO"/>
</id>
<field name="email" type="email" unique="true"/>
<field name="password" length="72"/>
</entity>
</doctrine-mapping>
Good luck.祝你好运。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.