2013-03-19 145 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