在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}