Pregunta

I'm trying to create a model class (which will use DBAL), and i'd like to use it like a service in my bundle.

I've tried to create a service with this configuration in my bundle :

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

But the fact is i don't want to configure this service in app/config/config.yml because it will only be used in one bundle.

Is there any way to create a specific bundle service, and giving @database_connection parameter to the class ? Or am i forced to configure it for all my app ?

My goal here is only to have distinct class for my controller and my model, without using the Doctrine ORM/Entity, just the DBAL.

¿Fue útil?

Solución

Yes, every bundle has his own config files.

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

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

The bundle configuration is loaded trough the DIC. So this file in your bundle is important

// 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');
    }
}

Generally, you should configure all services in the bundle specific services.yml and not in config.yml. So you can reuse them. But the service is visible for the complete application not only for the bundle. But this should be no problem.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top