的symfony /路由和请求上下文
问题描述:
阅读的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照顾与当前请求的信息(主机,方法等)来更新上下文。因此,当通过事件调度程序完成路由匹配时,不需要此可选步骤。
答
当创建一个新的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']);
但Matcher如何使用此对象? – spajak 2013-03-19 14:27:09