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.
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.