Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Modify bundle configuration from another bundle

I was wondering whether there's a possible to modify a bundles configuration from another bundle. Let's say, for example, I'm using the FOSUserBundle with the following configuration:

fos_user:
    db_driver: orm
    firewall_name: main
    user_class: Acme\UserBundle\Entity\User

And now, I want to change the user class when loading a specific extension (the AcmeFoobarExtension). Is it possible to change the configuration when loading the AcmeFoobarExtension? For example:

<?php
namespace Acme\FoobarBundle\DependencyInjection;

// use statements for dependency injection

class FoobarExtension extends Extension
{
    public function load(array $configs, ContainerBuilder $container)
    {
        $container->setConfiguration(
            'fos_user.user_class',
            'Acme\FoobarBundle\Entity\User'
        );
    }
}

Is something like this possible? Or defeats it the purpose of dependency injection?

EDIT: Apparently there's a pull request for Symfony 2.2 which addresses this idea/issue.

EDIT 2: This is now available in Symfony 2.2 (with an article in the cookbook).

like image 418
Ramon Kleiss Avatar asked Aug 24 '12 18:08

Ramon Kleiss


2 Answers

It should be noted that this is now an official feature of Symfony:

http://symfony.com/doc/current/cookbook/bundles/prepend_extension.html

A bundle can prepend configuration values to the global config parameters. To do that, the bundle extension must implement PrependExtensionInterface. The prepend() method can then add global configuration values.

Note, however, that the values may be overwritten by other bundles and in the config file itself.

like image 113
lxg Avatar answered Oct 14 '22 14:10

lxg


After asking the same question on the Symfony user mailing list (here's the question), I've found out that there's an open pull request for this idea.

It is for version 2.2 and not yet merged into master, but the last activity is from 3 days ago, so let's hope for the best!

like image 33
Ramon Kleiss Avatar answered Oct 14 '22 13:10

Ramon Kleiss