如何编写依赖于Doctrine并提供实体的symfony包?

时间:2016-08-03 13:46:58

标签: php doctrine-orm symfony

我正在尝试编写一个邮件队列捆绑包,用于将电子邮件事件存储到某个位置,并在以后检索它们并处理它们,因为我们不使用像mandrill或类似的服务。

对于(以及我的确切用法在这里没有真正的兴趣),我喜欢在我的包中提供其他实体,因为我的bundle附带了BufferedDatabaseMailQueue。

由于一些研究,我在我的包的config.yml中包含了以下(但未经测试的)行:

doctrine:
orm:
    auto_mapping: false
    mappings:
       AcmeDemoBundle:
          type: annotation
          alias: MyMailQueueBundle
          prefix: MyMailQueueBundle\Entity
          dir: %kernel.root_dir%/../src/MyMailQueueBundle/Entity
          is_bundle: true

无论如何我最终得到了这条错误消息:

  

YamlFileLoader.php第404行中的InvalidArgumentException:没有   扩展能够加载“doctrine”的配置

研究表明,PrependExtensionInterface可能会以某种方式帮助我。但我不知道如何正确使用和配置它。所以我的Bundle可以基于教义。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

我使用此代码管理它:

<?php

namespace AltergearMailQueueBundle;

use Doctrine\Bundle\DoctrineBundle\DependencyInjection\Compiler\DoctrineOrmMappingsPass;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\HttpKernel\Bundle\Bundle;
class MyMailQueueBundle extends Bundle
{
    public function build(ContainerBuilder $container)
    {
        /*
         * To extend the bundle to work with mongoDB and couchDB you can follow this tutorial
         * http://symfony.com/doc/current/doctrine/mapping_model_classes.html
         * */

        parent::build($container);
        $ormCompilerClass = 'Doctrine\Bundle\DoctrineBundle\DependencyInjection\Compiler\DoctrineOrmMappingsPass';

        if (class_exists($ormCompilerClass))
        {

            $namespaces = array( 'MyMailQueueBundle\Entity' );
            $directories = array( realpath(__DIR__.'/Entity') );
            $managerParameters = array();
            $enabledParameter = false;
            $aliasMap = array('MyMailQueueBundle' => 'MyMailQueueBundle\Entity');
            $container->addCompilerPass(
                DoctrineOrmMappingsPass::createAnnotationMappingDriver(
                        $namespaces,
                        $directories,
                        $managerParameters,
                        $enabledParameter,
                        $aliasMap
                )
            );
        }


    }
}