嗨,我在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
答案 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 文件中进行任何其他路由设置。