如果我在最后添加/
,则无法找到我的路线。
class QuizController extends Controller {
/**
* @Route("/quiz/{name}")
*/
public function showAction($name = '') {
$templating = $this->container->get('templating');
$html = $templating->render('quiz/show.html.twig', [
'name' => $name,
'title' => 'Hello World'
]);
return new Response($html);
}
}
问题是:
myurl/quiz/whatever
有效
myurl/quiz
有效
myurl/quiz/
无效
每当有斜线但后面没有值时,我会收到消息
找不到" GET /"
的路线
我是Symfony的新手。我该如何解决这个问题?
答案 0 :(得分:1)
使用myurl/quiz
表示未使用{name}
参数,但在使用myurl/quiz/
时,需要传入{name}
参数。
建议您添加默认值和路径名称,如下所示:
/**
* @Route("/quiz/{name}")
* defaults={"name" = 0},
* name="quiz")
*/
然后,如果您使用myurl/quiz/
,则会发送myurl/quiz/0
。这是一个例子
答案 1 :(得分:0)
在路线声明中添加结尾斜线,没有/的路线会自动重定向到带有/
的路线class QuizController extends Controller
{
/**
* @Route("/quiz/{name}/")
*/
public function showAction($name = '')
{
$templating = $this->container->get('templating');
$html = $templating->render('quiz/show.html.twig', [
'name' => $name,
'title' => 'Hello World'
]);
return new Response($html);
}
}
答案 2 :(得分:0)
编辑(通过电话)OP评论后:
在控制器操作之前放置2个@Route声明,在没有
的情况下放置一个@Route声明@Route( “/测验/”)
由于OP希望相同的路由控制器同时处理尾部斜杠和非尾部斜杠,因此解决方案是允许Symfony接受斜杠作为变量的一部分(默认情况下不是这样)。
文档:http://symfony.com/doc/current/routing/slash_in_parameter.html
所以你的路线变成了
class QuizController extends Controller {
/**
* @Route("/quiz{name}", name="quiz_name", requirements={"name"=".+"})
*/
public function showAction($name = '') {
$templating = $this->container->get('templating');
$html = $templating->render('quiz/show.html.twig', [
'name' => $name,
'title' => 'Hello World'
]);
return new Response($html);
}
}
请注意:虽然这回答了OP的问题,但这是一种危险的做法。对于阅读此内容的人来说,它可能适合OP的逻辑,但请注意它也会匹配任何路径
/quiz*
所以虽然OP想要这个,但它也会匹配
/quiz/name
/quiz/
/quiz
/quiz/name/edit
/quiz/name/delete
对于OP,解决方法是在Symfony按首次匹配获胜的基础匹配路由时,在此自定义之前包括编辑,删除路由。