为什么我的symfony路由无法正常工作?

时间:2012-11-16 10:15:54

标签: php symfony

嗨,我在symfony中的路由有问题。我的routing_dev看起来像:

_test:
    resource: "@MyBundle/Controller/DefaultController.php"
    type:     annotation
    prefix:   /test

然后我有一个控制器:

/**
 * @Route("/", name="_test")
 * @Template()
 */
public function indexAction($name)
{
    return array('name' => $name);
}

当我尝试运行/ test时,我收到消息:

No route found for "GET /test"
404 Not Found - NotFoundHttpException
1 linked Exception: ResourceNotFoundException »

我不知道错误在哪里。我需要你的帮助。如何找到问题?

编辑:我正在使用app_dev.php而不是app.php

5 个答案:

答案 0 :(得分:2)

首先,您必须确保routing.yml导入文件routing_dev.yml。

然后,您必须定义路由中参数中传递的$ name变量。如果此参数是可选的,则可以为其指定默认值。

此外,请注意,您可以将前缀直接放在注释中。

/**
 * @Route("/blog")
 */
class TheClassController extends Controller
{
    /**
     * @Route("/{name}", name="_test", defaults={"name" = "Jean"})
     * @Template()
     */
    public function indexAction($name)
    {
         return array('name'=>$name);
    }
}

之后,您可以运行命令php app/console router:debug来测试路由。

答案 1 :(得分:0)

也许您必须使用http://your.site/app_dev.php/test网址。或者将路由信息复制到routing.yml(而不是routing_dev.yml)

答案 2 :(得分:0)

你真的在输入你的网址/测试吗?因为您的路由只是“/”,所以您使用的名称用于从模板生成该路由。如果您希望网址为/ test,则应将路由参数更改为@Route("/test", name="test")

答案 3 :(得分:0)

你明确必须为行动设定路线。不仅仅是整个控制器。

你的routing.yml应该如下:

mybundle_controller:
    resource: "@MyBundle/Controller"
    type:     annotation
    prefix:   /test

您的控制器如:

/**
 * @Route("/") #Note you can omit this, since you set the prefix in the routing.yml
 * 
 */
public function indexAction($name)
{
    /**
     * @Route("/", name="_test"
     * @Template()
     */
    return array('name' => $name);
}

尝试运行php app/console router:debug

它应该返回类似

的东西
_test                   ANY      /test/

答案 4 :(得分:0)

如果您正在使用Symfony 4,则只需安装 doctrine / annotations 软件包。要下载它,请在您的终端中运行:

composer require annotations

该命令会将软件包下载到您的供应商文件夹中,并在 config / routes 文件夹下添加新的 annotations.yaml 文件。确保annotations.yaml中包含以下几行:

controllers:
    resource: ../../src/Controller/
    type: annotation

您不需要在 config / routes.yaml 文件中进行任何其他路由设置。