阅读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负责用当前请求信息(主机,方法等)更新上下文。因此,当通过事件调度程序完成路由匹配时,不需要此可选步骤。
答案 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
创建的Contextuse 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']);