在Symfony 2+中,当您描述为特定路线执行的方法时,您可以使用以下任一方法:
MyBundle:MyController:hello
或者,假设您setup MyController
to be managed by the dependency injection container为服务my_controller
:
my_controller:helloAction
为什么Symfony在一个案例中期望Action
后缀而在另一个案例中不期望?{/ p>
答案 0 :(得分:3)
为什么第二个变种需要 helloAction而不是hello, 比如第一个变种?
<强>都能跟得上!强>
不要被误导。
定义controller as service时,控制器方法名称可以是您想要的任何名称
因此,如果在您的控制器中有一个名为hello
的方法,那么您必须在路由配置中仅将其定义为hello
,而不是helloAction
(这是错误的)。这就是为什么symfony 期望为有效的可调用名称。
另一方面,当从默认框架控制器扩展时,Symfony期望所有方法名称都有Action
后缀(这只是一个约定而不是技术要求,请参阅Symfony\Component\HttpKernel\KernelInterface#ControllerNameParser
,line 78 )。
这是一个实际的例子:
namespace AppBundle\Controller;
/** My controller as service */
class DefaultController
{
public function hello()
{
return new Symfony\Component\HttpFoundation\Response('Hello!');
}
}
我的路线设置:
# app/config/touting.yml
hello:
path: /hello
# NOTE: Method name is hello, not helloAction
defaults: {_controller: app.controller.default:hello}