使用Zend Framework

时间:2017-09-24 00:19:31

标签: php zend-framework doctrine-orm

该应用程序正在使用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"
            ]
        ]
    ]
]

是否有任何可行的解决方案,我在文档中找不到?

0 个答案:

没有答案