像symfony 2中的一个捆绑服务

时间:2013-05-31 09:31:38

标签: symfony service dbal

我正在尝试创建一个模型类(将使用DBAL),并且我想将它用作我的包中的服务。

我尝试在我的捆绑包中使用此配置创建服务:

services:
   X:
     class:        X
     arguments:   [@database_connection]

但事实是我不想在app / config / config.yml中配置此服务,因为它只会在一个包中使用。

有没有办法创建特定的捆绑服务,并为该类提供 @database_connection 参数?或者我被迫为我的所有应用配置它?

我的目标只是为我的控制器和我的模型提供不同的类,而不使用Doctrine ORM / Entity,只使用DBAL。

1 个答案:

答案 0 :(得分:1)

是的,每个捆绑包都有自己的配置文件。

# src/Acme/YourBundle/Resources/config/services.yml

services:
    X:
       class:        X
       arguments:   [@database_connection]

捆绑配置通过DIC加载。所以你的包中的这个文件很重要

// src/Acme/YourBundle/DependencyInjection/AcmeYourBundleExtension.php

namespace Acme\YourBundle\DependencyInjection;

use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
use Symfony\Component\DependencyInjection\Loader;

/**
 * This is the class that loads and manages your bundle configuration
 *
 * To learn more see {@link http://symfony.com/doc/current/cookbook/bundles/extension.html}
 */
class AcmeYourExtension 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('services.yml');
    }
}

通常,您应该在特定包services.yml中而不是config.yml中配置所有服务。所以你可以重复使用它们。但是该服务对于整个应用程序而言不仅对于捆绑包而言是可见的。但这应该没问题。