How to access an application parameters from a service?

后端 未结 9 805
梦如初夏
梦如初夏 2020-12-23 10:49

From my controllers, I access the application parameters (those in /app/config) with

$this->container->getParameter(\'my_param\')
<         


        
9条回答
  •  南笙
    南笙 (楼主)
    2020-12-23 11:30

    The Clean Way 2018

    Since 2017 and Symfony 3.4 there is much cleaner way - easy to setup and use.

    Instead of using container and service/parameter locator anti-pattern, you can pass parameters to class via it's constructor. Don't worry, it's not time-demanding work, but rather setup once & forget approach.

    How to set it up in 2 steps?

    1. config.yml

    # config.yml
    parameters:
        api_pass: 'secret_password'
        api_user: 'my_name'
    
    services:
        _defaults:
            autowire: true
            bind:
                $apiPass: '%api_pass%'
                $apiUser: '%api_user%'
    
        App\:
            resource: ..
    

    2. Any Controller

    apiPass = $apiPass;
            $this->apiUser = $apiUser;
        }
    
        public function registerAction(): void
        {
            var_dump($this->apiPass); // "secret_password"
            var_dump($this->apiUser); // "my_name"
        }
    }
    

    Instant Upgrade Ready!

    In case you use older approach, you can automate it with Rector.

    Read More

    This is called constructor injection over services locator approach.

    To read more about this, check my post How to Get Parameter in Symfony Controller the Clean Way.

    (It's tested and I keep it updated for new Symfony major version (5, 6...)).

提交回复
热议问题