1

我有以下教义配置,

教义配置

doctrine:
    dbal:
        default_connection: default    
        connections:

            default:
                driver:   %database_driver%
                host:     %database_host%
                port:     %database_port%
                dbname:   %database_name%
                user:     %database_user%
                password: %database_password%
                charset:  UTF8
                mapping_types:
                   enum:    string

            em1:                    
                driver:   %database_driver%
                host:     %database_host%
                port:     %database_port%
                dbname:   em1
                user:     %database_user%
                password: %database_password%
                charset:  UTF8

            em2:                    
                driver:   %database_driver%
                host:     %database_host%
                port:     %database_port%
                dbname:   em2
                user:     %database_user%
                password: %database_password%
                charset:  UTF8
        types:
            json: Sonata\Doctrine\Types\JsonType
orm:
    auto_generate_proxy_classes: %kernel.debug%
    default_entity_manager: default

    entity_managers:
        default:
            connection: default
            mappings:
              MyDemoBundle : ~
              MyMessagingBundle : ~
        em1:
            connection: em1
            mappings:
              MyOtherBundle : ~
        porting:
            connection: em2
            mappings:
              SonataNotificationBundle: ~
              ApplicationSonataNotificationBundle: ~

我在 MyDemoBundle 中有我的所有实体

使用 MyDemoBundle 的实体,MyMessagingBundle 正在从 em1 数据库中读取表,创建消息以发送电子邮件并将这些消息传递给奏鸣曲后端服务,该服务应该将它们存储到数据库 em2 中奏鸣曲的表“notifications__message”中。但我收到错误

在链配置的命名空间 My\DemoBundle\Entity 中找不到类 'Application\Sonata\NotificationBundle\Entity\Message'

看起来像是从 em1 实体管理器下的 MyMessagingBundle 调用位于 em2 实体管理器下的 SonataNotificationBundle 服务不允许奏鸣曲访问其在 em2 下的实体。它尝试从调用服务的位置查找实体。

最初,当在 em1 下的捆绑包下时,一切正常。我只是将它们移至 em2 实体管理器。

SonataNotificationBundle: ~ ApplicationSonataNotificationBundle: ~

请帮忙。

4

2 回答 2

0

我自己得到了解决方案,

我刚刚深入研究了 SonataNotificationBundle 代码。

他们有,

<services>
    <service id="sonata.notification.entity_manager" alias="doctrine.orm.default_entity_manager" />

    <service id="sonata.notification.manager.message.default" class="Sonata\NotificationBundle\Entity\MessageManager">
        <argument type="service" id="sonata.notification.entity_manager" />
        <argument>%sonata.notification.message.class%</argument>
    </service>
</services>

几乎没有耦合默认实体管理器,因此在自定义实体管理器下移动 SonataNotificationBundle 将不起作用。

为了修复它,我在 config.yml 中创建了具有相同名称的服务,并将自定义实体管理器传递给它。

services:
    sonata.notification.entity_manager:
        alias: doctrine.orm.em2_entity_manager
于 2013-08-01T11:37:29.587 回答
0

我刚刚找到了一个更好的方法来使用你的app/config/config.yml

sonata_notification:
    class:
            message: MyDemoBundle\Entity\Message
于 2014-11-26T10:09:07.757 回答