由依赖项注入容器和"action"后缀管理的控制器



在Symfony 2+中,当你描述为特定路由执行的方法时,你可以使用:

MyBundle:MyController:hello

或者,假设您将MyController设置为由依赖注入容器作为服务my_controller管理:

my_controller:helloAction

为什么Symfony在一种情况下期望Action后缀,而在另一种情况下却没有?

为什么第二个变体需要 helloAction 而不是 hello, 就像在第一个变体中一样?

不!
不要被误导。

将控制器定义为服务时,控制器方法名称可以是所需的任何名称。
因此,如果在控制器中您有名为 hello 的方法,因此您必须在路由配置中将其定义为仅hello,而不是helloAction(这是错误的)。这就是为什么symfony需要一个有效的可调用名称。

另一方面,当从默认框架控制器扩展时,Symfony希望所有方法名称都有一个Action后缀(这只是一个约定而不是技术要求,请参阅SymfonyComponentHttpKernelKernelInterface#ControllerNameParser,第78行)。

下面是一个实际示例:

namespace AppBundleController;
/** My controller as service */
class DefaultController 
{
    public function hello() 
    {
        return new SymfonyComponentHttpFoundationResponse('Hello!');
    }
}

我的路线设置:

# app/config/touting.yml
hello:
    path: /hello
    # NOTE: Method name is hello, not helloAction
    defaults: {_controller: app.controller.default:hello} 

最新更新