Php Symfony 3魔术

Php Symfony 3魔术,php,symfony,Php,Symfony,我正在和Symfony一起迈出第一步。 我有一个文件DefaultController.php,其中包含两个相同的函数: /** * @Route("/test/", name="test") */ public function indexActionTest(Request $request) { return new Response('<html><body>Lucky number: it works!

我正在和Symfony一起迈出第一步。 我有一个文件DefaultController.php,其中包含两个相同的函数:

    /**
     * @Route("/test/", name="test")
     */
    public function indexActionTest(Request $request)
    {
        return new Response('<html><body>Lucky number: it works!</body></html>');
    }

    /**
     * @Route("/test2/", name="test2")
     */
    public function indexActionTest2(Request $request)
    {
        return new Response('<html><body>Lucky number: it works here as well!</body></html>');
    }
/**
*@Route(“/test/”,name=“test”)
*/
公共函数索引测试(请求$Request)
{
返回新的响应('幸运数字:有效!');
}
/**
*@Route(“/test2/”,name=“test2”)
*/
公共函数indexActionTest2(请求$Request)
{
返回新的响应(“幸运数字:它在这里也有效!”);
}
有趣的是,第一个有效,而第二个无效
即使控制台说路由匹配!这怎么可能呢?

您的公共控制器方法应该始终以动作结束

[method]Action(Request $request){}
因此,对于test2,您应该将其命名为:

public function test2Action(Request $request)
此外,除非覆盖另一条管线,否则不需要添加名称:

    /**
     * @Route("/test/")
     */
    public function testAction(Request $request)
    {
        return new Response('<html><body>Lucky number: it works!</body></html>');
    }


    /**
     * @Route("/test2/")
     */

    public function test2Action(Request $request)
    {
        return new Response('<html><body>Lucky number: it works here as well!</body></html>');
    }
/**
*@Route(“/test/”)
*/
公共功能测试(请求$Request)
{
返回新的响应('幸运数字:有效!');
}
/**
*@Route(“/test2/”)
*/
公共函数test2Action(请求$Request)
{
返回新的响应(“幸运数字:它在这里也有效!”);
}

尝试在
indexActionTest2
之前删除空行,因此docblock直接位于方法之前。不幸的是,它没有帮助(:我做了一个测试,它工作正常。它一定是其他原因。这些方法在同一个控制器中吗?这些路由的路由配置是什么?尝试命名方法
IndexStation()
indexTest2Action()
(Action应该是最后的后缀)@craigh使用注释时没有这样的要求。在我的测试项目中它是这样工作的。一点也不正确;-)使用注释时,不必这样命名。我刚刚在我的测试项目中验证了这一点。如果您想在Twig中执行
path('test')
,在controller中执行重定向等操作,那么命名路由也很有用。Route的名字是一个在很多情况下都可以使用的处理程序。我没有说必须,我说应该,它的最佳实践就是我的意思。如果您使用YML路由,symfony将查找名为[method name]Action的控制器函数,如果您在该场景中使用ActionTest,它将无法工作。同样对于测试路径,可能更方便,但又不是一个要求,您会得到一个自动生成的路由com_bundle_controller_action.“If”,但他不使用yml路由;-)无论如何,这些实践与这里的问题没有任何关系。所以你的答案与问题根本没有关系。