2013-03-19 98 views
1

阅读的symfony /路由readme的symfony /路由和请求上下文

// ... 

$context = new RequestContext(); 

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

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

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

EDIT

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

回答

0

当创建一个新的RequestContext时,构造函数会接受下列参数,如果您没有,则使用以下默认值。

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

然而,RequestContext对象可以如果给出一个从HttpFoundation \请求对象中检索这些值。我相信这是一个新的2.1,因为它不是2.0 API文档中提到

您可以生成自定义的对象自己的语境,而不是使用一个从PHP全局创建

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没有创建新的请求对象

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

但Matcher如何使用此对象? – spajak 2013-03-19 14:27:09