Symfony2 - bundle中的doctrine连接配置

Kam*_*l P 5 php doctrine symfony

我有一个使用我的附加包的项目.此捆绑包连接到其他数据库,我需要配置另一个数据库.

我希望在2个配置文件中建立此连接.

主配置:

# ROOT/app/config/config.yml:
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
Run Code Online (Sandbox Code Playgroud)

捆绑配置:

# src/SecondBundle/Resources/config/config.yml
doctrine:
    dbal:
        connections:
            secondBundle:
                driver:   "%secondBundle.database_driver%"
                host:     "%secondBundle.database_host%"
                port:     "%secondBundle.database_port%"
                dbname:   "%secondBundle.database_name%"
                user:     "%secondBundle.database_user%"
                password: "%secondBundle.database_password%"
                charset:  UTF8
Run Code Online (Sandbox Code Playgroud)

捆绑扩展文件:

class SecondBundleExtension extends Extension
{
    /**
     * {@inheritdoc}
     */
    public function load(array $configs, ContainerBuilder $container)
    {
        $configuration = new Configuration();
        $config = $this->processConfiguration($configuration, $configs);

        $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
        $loader->load('config.yml');
    }
}
Run Code Online (Sandbox Code Playgroud)

在我看来,一切看起来都不错,但是当我试图运行时,我已经沟通:

没有扩展能够加载"doctrine"的配置

Mic*_*rin 5

您可以声明特定于您的包的第二个驱动程序(SecondBundle在您的示例中使用PrependExtensionInterface.

首先将您的config.yml文件重命名SecondBundledoctrine.yml(或不是 的任何其他名称config.yml)。

现在SecondBundleExtension像这样改变你的班级:

use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException;
use Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface;
use Symfony\Component\Yaml\Exception\ParseException;
use Symfony\Component\Yaml\Parser as YamlParser;
// ...

class SecondBundleExtension extends Extension implements PrependExtensionInterface
{
    public function load(array $configs, ContainerBuilder $container)
    {
        // ...
    }

    public function prepend(ContainerBuilder $container)
    {    
        $yamlParser = new YamlParser();

        try {
            $doctrineConfig = $yamlParser->parse(
                file_get_contents(__DIR__.'/../Resources/config/doctrine.yml')
            );
        } catch (ParseException $e) {
            throw new InvalidArgumentException(sprintf('The file "%s" does not contain valid YAML.', $file), 0, $e);
        }

        $container->prependExtensionConfig('doctrine', $doctrineConfig['doctrine']);
    }
}
Run Code Online (Sandbox Code Playgroud)

secondBundle当您启用捆绑包时,您的连接现在将自动注册。


qoo*_*mao 2

您可以将额外的配置添加到您的导入中app/config/config.yml,以便将其合并到完整的config.

app/config/config.yml

imports:
    - { resource: parameters.yml }
    - { resource: security.yml }
    - { resource: '@SecondBundle/Resources/config/config.yml' }
Run Code Online (Sandbox Code Playgroud)

由于自a non-quoted string cannot start with @ or ` (reserved) nor with a scalar indicator (| or >)3.0 版以来,已用引号进行了更新。