Symfony 3.4-自动装配不适用于绑定值?

时间:2019-01-14 12:01:27

标签: symfony autowired

我正在将现有的Symfony 2.8项目迁移到Symfony 3.4,并且希望将%kernel.environment%参数的值自动装配/自动注入到控制器操作中。

但是将参数绑定到参数名称不起作用:

// app/config/services.yml
services:
    _defaults:
        autowire: true
        autoconfigure: true
        public: false        

        bind:
            $kernelEnvironment: '%kernel.environment%'

        MyBundle\:
            resource: '../../src/MyBundle/*'
            exclude: '../../src/MyBundle/{Entity,Repository,Tests}'

        MyBundle\Controller\:
            resource: '../../src/MyBundle/Controller'
            tags: ['controller.service_arguments']


// src/MyBundle/SomeController.php
public function showPostAction($kernelEnvironment, $post_id) {
    ...
}
  

未捕获的PHP异常RuntimeException:“控制器“ MyBundle \ Controller \ SomeController :: showPostAction()”要求您为“ $ kernelEnvironment”参数提供一个值。该参数可为空,并且未提供任何空值,否已提供默认值,或因为提供了默认值。”

为什么这不起作用?

我知道我可以直接在MyBundle\Controller\SomeController中指定services.yml并在参数列表中设置$kernelEnvironment的值。但是,此解决方案意味着我必须为使用该参数的每个控制器指定参数。这不是autorwire的优点。绑定参数应该起作用,不是吗?

0 个答案:

没有答案