php - Symfony 2 + Doctrine 2 覆盖实体配置

标签 php symfony doctrine-orm

我有一个案例,我需要跨多个应用程序(位于同一项目中)重用通用原则实体。这些应用程序仅仅是相应机构使用的信息系统的实例。

我已将所有实体和存储库隔离到单独的包中,到目前为止效果很好。 重点是:我收到了一个要求,即只有其中一些实例需要支持其他一些功能。修改将包括向某些实体添加新的属性/关系。

这是一个简短的例子:

我们有一所大学,它有许多教员单位(即实例)。信息系统的建立仅支持学士学习计划,但一个月前我们收到了支持专业硕士学习的要求。他们想处理所有他们认为相同的应用程序实例。 这仅适用于其中一些实例

问题:有什么方法可以在保持原始实体功能的同时“覆盖”受影响的实体吗?我可以完全覆盖实体配置(YAML 或注释,不重要)吗?我真的很想保留代码库而不是将所有实体/存储库复制到另一个包...

最佳答案

您可以通过捕获事件来覆盖实体加载中的类元数据。

事件监听器

<?php

namespace Lol\RandomBundle\EventListener;

use Doctrine\ORM\Event\LoadClassMetadataEventArgs;

class ClassMetadataListener
{
    /**
     * Run when Doctrine ORM metadata is loaded.
     *
     * @param LoadClassMetadataEventArgs $eventArgs
     */
    public function loadClassMetadata(LoadClassMetadataEventArgs $eventArgs)
    {
        $classMetadata = $eventArgs->getClassMetadata();

        // Override User class to flag MappedSuperclass.
        if ('AnotherLol\AnotherRandomBundle\Entity\User' === $classMetadata->name) {
            // Do whatever you want...
            $classMetadata->isMappedSuperclass = true;
        }
    }
}

服务配置

services:
    lol.random.listener.class_metadata:
        class: Lol\RandomBundle\EventListener\ClassMetadataListener
        tags:
            -  { name: doctrine.event_listener, event: loadClassMetadata }

关于php - Symfony 2 + Doctrine 2 覆盖实体配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12872523/

相关文章:

php - 如何使用 PHP 简单 DOM 在没有属性的情况下查找数据并从旁边的 html 表 td 元素中获取文本?

php - 如何将 mysql_num 与 somfony2 一起使用

php - Symfony2 Doctrine 将所有计数视为整数

php - 如何清理和存储 WordPress 中包含 HTML 正则表达式模式的用户输入

php - 如何通过 ioncube 编码/加密 Laravel Blade 文件

javascript - KnpLabs/snappy bundle (wkhtmltopdf) 不呈现 Chart.js 图表

php - Symfony2 上 2 个 Controller 之间的路由问题

Symfony警告: rename (. ./app/cache/dev,../app/cache/dev_old): Access Denied .(代码:5)

symfony - 如何在学说中启用第二级缓存?

php - 用于获取特定列数据的 Doctrine sql 语法