我正在努力学习Symfony,所以我对它很陌生,这可能是一个愚蠢的问题,但仍然无法找到答案。
我使用最新版本的Symfony(今天获得)和最新版本的PHP 7.1.9。 我有一个名为“Project”的Symfony项目,其中包含一个包:SSTestBundle。 在“src / SS / BlogBundle / Resources / config / routing.yml”中,我有以下路线:
ss_blog_home:
path: /{page}
defaults:
_controller: SSBlogBundle:Discussion:index
page: 1
requirements:
page: \d*
我有一个名为DiscussionController的控制器,具有以下功能:
public function indexAction($page)
{
if ($page < 1)
{
throw new NotFoundHttpException('Page -'.$page.'- not existing.');
}
return $this->render('OCPlatformBundle:Advert:index.html.twig');
}
因此,如果我的“page”参数的值无效,我会得到一个404页面,其中包含“Page -X- not existing”消息。如果页码正确,它会显示一个非常基本的模板来表示问候。
如果我使用“localhost / web / Project /”访问我的项目,我收到消息:“页面 - 不存在”。一切似乎工作得很好,除了$ page不等于1但没有任何东西!
如果我使用“localhost / web / Project / 5”访问我的项目,它会显示页面。
如果我使用“localhost / web / Project / 0”访问我的项目,它会显示错误页面,“Page -0- not existing”。
但是!如果我将路线从“/ {page}”更改为“/ test / {page}”并尝试访问“localhost / web / Project / test /”,它会正常工作并显示页面!
只有在我将路由设置为根文件夹时才知道为什么它会为'page'返回null默认值? T_T
答案 0 :(得分:1)
一些重要结论:
答案 1 :(得分:0)
根据有关路由的Symfony 3文档(请参阅here),您应该能够设置默认路由参数,如下所示:
ss_blog_home:
path: /{page}
defaults: { _controller: SSBlogBundle:Discussion:index, page: 1 } # this sets the default page number for the route to 1.
requirements:
page: '\d+' # this line requires that a digit of length 1 or more is passed in to the route.
答案 2 :(得分:0)
但是!如果我将路由从“/ {page}”更改为“/ test / {page}”并尝试访问“localhost / web / Project / test /”,它可以正常工作并显示页面! 因条件 代码不会查找页面类型,因此您可以发送任何您喜欢的内容并且它可以正常工作
if($ page&lt; 1) { 抛出新的NotFoundHttpException('Page - '。$ page。' - not existing。'); }
答案 3 :(得分:0)
根据您的捆绑“OCPlatformBundle”的名称,我猜你跟着Openclassroom Symfony tutorial。所以我假设你的路线有一个前缀,并且和我一样遇到同样的问题。起初我也不明白,但是当你为你的路线添加前缀时,我发现它确实是Symfony的限制!