我正在将现有的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的优点。绑定参数应该起作用,不是吗?