1

I'm new to Symfony and i'm trying to load different parameters.yml depending on host, including database configuration. So, in apache vhosts, I defined a variable that let me know what client is in PHP by $_SERVER["CLIENTID"] ( Directive SetEnv ). And now I want to, for example if CLIENTID is "client1", load parameters_client1.yml, that contains db_host, db_user, etc... I tried this way :

app/config/config.yml

doctrine:
    dbal:
        host:     "%db_host%"
        dbname:   "%db_name%"
        user:     "%db_user%"
        password: "%db_password%"

app/config/parameters_client1.yml

parameters:
    db_host: "localhost"
    db_name: "client1_database"
    db_user: "client1"
    db_password: "something"

src/AppBundle/DependencyInjection/Configuration.php

namespace AppBundle\DependencyInjection;
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
use Symfony\Component\Config\Definition\ConfigurationInterface;

class Configuration implements ConfigurationInterface
{
    public function getConfigTreeBuilder()
    {
        $treeBuilder = new TreeBuilder();
        $rootNode = $treeBuilder->root('appbundle');
        return $treeBuilder;
    }
}

src/AppBundle/DependencyInjection/AppExtension.php

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

class AppExtension extends Extension
{
    public function load(array $configs, ContainerBuilder $container)
    {
        $configuration = new Configuration();
        $config = $this->processConfiguration($configuration, $configs);
        $rootdir = $container->getParameter('kernel.root_dir');
        // Load the bundle's services.yml
        $loader = new Loader\YamlFileLoader($container, new         FileLocator(__DIR__.'/../Resources/config'));
        $loader->load('services.yml');
        // Load parameters depending on current host
        $paramLoader = new Loader\YamlFileLoader($container, new FileLocator($rootdir.'/config')); // Access the root config directory

        $parameters = "parameters.yml";

        if( array_key_exists("CLIENTID", $_SERVER) )
        {
            $paramfile = sprintf('parameters_%s.yml', $_SERVER["CLIENTID"]);
            if (file_exists($rootdir.'/config/'.$paramfile))
            {
                $parameters = $paramfile;
            }
        }

        $paramLoader->load($parameters);
    }
}

But that's not working, I got the following error :

ParameterNotFoundException in ParameterBag.php line 100:
You have requested a non-existent parameter "db_host".

Please can somebody explain me what I've missed ? I'm using Symfony 3.2

1 Answer 1

1

A rough guess are you including the resource in app/config/config.yml

imports:
    - { resource: parameters.yml }
    - { resource: security.yml }
    - { resource: services.yml }
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.