【发布时间】:2014-06-22 05:13:04
【问题描述】:
我有一个非常简单的捆绑控制器
<?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 -> 它使重定向(不知道 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 ?我显然期望 /contact/ url 不是联系人/
为什么在 案例 2 应用程序也接受 /contact url 将其重定向到 /contact/
为什么 case 1 和 case 2
的行为不同
是否可以改变这种行为 - 例如在我的情况下根本不接受 /contact ? (事实上我不介意,因为我想要一些带有斜杠的网址,但在 case 1 中,我必须为不带斜杠的版本进行重定向)
Symfony 是否为所有 url 做这样的“技巧”(也有扩展名,例如我定义它适用于 /test.html 并且 Symfony 使它也适用于 /test.html/ )或只适用于那些没有扩展名?
我在哪里可以阅读更多关于此类案例的信息?
【问题讨论】:
-
看看这个answer
-
我今天看到了这个并看到了这个技巧,但它对我来说相当“hack”来使它工作,但我仍然不明白为什么在 2 种情况下 Symfony 的行为不同
-
表现不同,因为模式不同,我希望 sf2 在模式中支持正则表达式
标签: php url symfony redirect symfony-2.4