4

嗨,我在 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

4

5 回答 5

3

首先,您必须确保 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以测试路由。

于 2012-11-16T10:23:36.540 回答
0

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

于 2012-11-16T10:19:27.537 回答
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/
于 2012-11-16T14:59:37.203 回答
0

您实际上是在输入您的网址 /test 吗?因为您的路线只是“/”,所以您提供的名称用于从模板生成该路线。如果您希望 url 为 /test 您应该将您的路由参数更改为@Route("/test", name="test")

于 2012-11-16T13:00:50.250 回答
0

如果你使用 Symfony 4,你只需要安装学说/注释包。要下载它,请在终端运行:

composer require annotations

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

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

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

于 2019-09-12T10:03:18.183 回答