symfony /路由和请求上下文

时间:2013-03-19 13:27:15

标签: symfony routing

阅读symfony /路由readme

// ...

$context = new RequestContext();

// this is optional and can be done without a Request instance
$context->fromRequest(Request::createFromGlobals());

$matcher = new UrlMatcher($routes, $context);

这是什么意思可选?没有它,Matcher功能在某种程度上是有限的吗?匹配器如何使用Request对象?

修改

我发现RouteListener负责用当前请求信息(主机,方法等)更新上下文。因此,当通过事件调度程序完成路由匹配时,不需要此可选步骤。

1 个答案:

答案 0 :(得分:0)

创建新的RequestContext时,构造函数采用以下参数,如果不这样做,则使用以下默认值。

$baseUrl   = ''
$method    = 'GET'
$host      = 'localhost'
$scheme    = 'http'
$httpPort  = 80
$httpsPort = 443
$path      = '/'

但是,RequestContext对象可以从HttpFoundation \ Request对象中检索这些值(如果有)。我相信这是2.1的新功能,因为它没有在2.0 API文档中提及

您可以从自定义Request对象生成自己的Context,而不是使用从PHP Globals

创建的Context
use Symfony\Component\Routing\Matcher\UrlMatcher;
use Symfony\Component\Routing\RequestContext;
use Symfony\Component\HttpFoundation\Request;

$context = new RequestContext();

$context->fromRequest(Request::create('?foo=1&bar=2'));
$matcher = new UrlMatcher($routes, $context);

或直接应用PHP Global而不创建新的Request对象

$context = new RequestContext($_SERVER['REQUEST_URI']);