Symfony2: How to inject ALL parameters in a service?

后端 未结 7 898
既然无缘
既然无缘 2020-12-28 14:14

How can I inject ALL parameters in a service?

I know I can do: arguments: [%some.key%] which will pass the parameters: some.key: \"value\"

7条回答
  •  暗喜
    暗喜 (楼主)
    2020-12-28 15:01

    Another variant how to get parameters easy - you can just set ParameterBag to your service. You can do it in different ways - via arguments or via set methods. Let me show my example with set method.

    So in services.yml you should add something like:

    my_service:
        class: MyService\Class
        calls:
            - [setParameterBag, ["@=service('kernel').getContainer().getParameterBag()"]]
    

    and in class MyService\Class just add use:

    use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
    

    and create 2 methods:

    /**                                                                                                                                                                      
     * Set ParameterBag for repository                                                                                                                                       
     *                                                                                                                                                                       
     * @param ParameterBagInterface $params                                                                                                                                  
     */
    public function setParameterBag(ParameterBagInterface $params)
    {
        $this->parameterBag = $params;
    }
    
    /**                                                                                                                                                                      
     * Get parameter from ParameterBag                                                                                                                                       
     *                                                                                                                                                                       
     * @param string $name                                                                                                                                                   
     * @return mixed                                                                                                                                                        
     */
    public function getParameter($name)
    {
        return $this->parameterBag->get($name);
    }
    

    and now you can use in class:

    $this->getParameter('your_parameter_name');
    

提交回复
热议问题