我有一个非常简单的捆绑控制器
<?php
namespace Mnab\ContactBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
class DefaultController extends Controller
{
public function indexAction($anything)
{
return new \Symfony\Component\HttpFoundation\Response(__CLASS__ .' '.$anything);
//return $this->render('MnabContactBundle:Default:index.html.twig', array('name' => $anything));
}
}
我在YML文件中有roter配置
案例1 :此控制器的路由如下:
mnab_contact_homepage:
pattern: contact/{anything}
defaults: { _controller: MnabContactBundle:Default:index, anything: null }
requirements:
anything: .*
在这种情况下,应用程序会为此控制器接受以下网址:
/ contact / contact / / contact / bla / contact / bla / bla / blabla
等等
案例2 我对此控制器的路由如下:
mnab_contact_homepage:
pattern: contact/
defaults: { _controller: MnabContactBundle:Default:index, anything: null }
requirements:
anything: .*
在这种情况下,应用程序只接受
/接触/
和
如果有网址:
/ contact - &gt;它使重定向(不要知道什么类型301或302)到/ contact / url
案例3 此控制器的路由如下所示:
mnab_contact_homepage:
pattern: contact
defaults: { _controller: MnabContactBundle:Default:index, anything: null }
requirements:
anything: .*
在这种情况下,应用程序只接受
/接触
预期结果
在案例3中,一切都如我所料,但案例1和2的工作并不像我预期的那样
问题
为什么案例1 应用程序也接受/ contact url?我明确期望/联系/网址不联系/
为什么案例2 应用程序也接受/ contact url将其重定向到/ contact /
为什么行为在案例1 和案例2
是否可以更改此行为 - 例如在我的情况下根本不接受/联系? (事实上我不介意,因为我想要一些带尾随斜杠的网址但是在 case 1 中我必须为版本重定向而不用斜杠)
Symfony是否会这样做&#34;技巧&#34;对于所有网址(也有扩展名,例如我定义它适用于/test.html,Symfony也适用于/test.html/)或仅适用于没有扩展名的网址?
我在哪里可以阅读更多有关此类案件的内容?
答案 0 :(得分:2)
为什么1个应用程序也接受/联系url?我清楚了 期待/联系/网址不联系/
/contact
表示您遗漏了anything
参数,在这种情况下null
。
/contact/
表示您不会遗漏anything
参数。在这种情况下,应该抛出NotFoundHttpException
,因为您没有为anything
参数提供任何值。
为什么2个应用程序也接受/联系网址制作 将其重定向到/ contact /
这是Symfony2 routing component的行为,真的无法更多地了解它。
为什么在案例1和案例2中行为不同
因为在案例1中,路线中有参数。该参数虽然是默认值。在案例2中,路线中没有参数。
是否可以更改此行为 - 例如,不接受at 所有/联系我的情况
是的,例如,将anything
参数设为必需参数,而不是可选参数。
Symfony是否会这样做&#34;技巧&#34;对于所有网址(也有扩展名) 示例我定义它适用于/test.html,Symfony使其工作 也适用于/test.html/)或仅适用于没有扩展名的人
路由组件的行为是一致的,如果您使用test
或test.html
则无关紧要。
我可以在哪里阅读更多关于此类案件的内容?
关于此问题,我们不是很多来源,但您可以随时查看routing component的源代码。
但是,可以在此处找到路由组件的文档Routing。