该应用程序正在使用Zend Framework 3和Doctrine2。 我和我的团队正在开发一个系统,其中包括一个"核心"部分,可以为所有客户更新,以及"本地"部分,持有客户特定的逻辑。
让我们举一个货币的实体定义,必须为具有特定需求的客户扩展,比如添加另一个字段来启用/禁用货币和/或更改实体存储库\监听器,以便可以添加新方法。
<?php
namespace Currency\Core\Entity;
use Doctrine\ORM\Mapping as ORM;
use Rizn\Doctrine\AbstractEntity;
/**
* Class Currency
*
* @ORM\Entity(repositoryClass="Currency\Core\Entity\Repository\CurrencyRepository")
* @ORM\EntityListeners({"Currency\Core\Entity\Listener\CurrencyListener"})
* @ORM\Table(name="Currency", options={"collate"="utf8_general_ci", "charset"="utf8"})
*/
class Currency extends AbstractEntity{
/**
* @var int
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
public $id;
/**
* @var string
* @ORM\Column(type="string")
*/
public $code;
/**
* @var float
* @ORM\Column(type="decimal", precision=8, scale=5)
*/
public $coefficient;
/**
* @var string
* @ORM\Column(type="string")
*/
public $symbol;
/**
* @var string
* @ORM\Column(type="string")
*/
public $decimalPoint = ".";
/**
* @var string
* @ORM\Column(type="string")
*/
public $thousandsSeparator = "";
/**
* @var bool
* @ORM\Column(type="boolean")
*/
public $appendSymbol;
/**
* @var bool
* @ORM\Column(type="boolean")
*/
public $isDefault;
}
我应该如何扩展此实体并为其添加更多属性或更改注释?我能得到的最远的是使用类注释来定义和清空实体,这些注释从Core one扩展:
<?php
namespace Currency\Local\Entity;
use Currency\Core;
use Doctrine\ORM\Mapping as ORM;
/**
* Class Currency
*
* @ORM\Entity(repositoryClass="Currency\Local\Repository\CurrencyRepository")
* @ORM\EntityListeners({"Currency\Local\Entity\Listener\CurrencyListener"})
* @ORM\Table(name="Currency", options={"collate"="utf8_general_ci", "charset"="utf8"})
*/
class Currency extends Core\Entity\Currency{
}
存储库遵循相同的逻辑 - 本地类,扩展核心类。但是,它似乎不太正确,因为我无法更新类注释。说我必须添加一个新索引 - 不可能。我必须通过所有的客户&#39;项目并手动添加。另外,为了扩展,还有很多膨胀代码。并且有一些类不太可能被扩展。
这是我目前在货币模块的module.config.php中的Doctrine配置:
"doctrine" => [
"driver" => [
__NAMESPACE__ . "_driver" => [
"class" => AnnotationDriver::class,
"cache" => "array",
"paths" => [dirname(__DIR__) . "/src/" . __NAMESPACE__ . "/Entity"]
],
"orm_default" => [
"drivers" => [
__NAMESPACE__ . "\\Entity" => __NAMESPACE__ . "_driver"
]
]
]
]
是否有任何可行的解决方案,我在文档中找不到?