2

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);

オプションであるとはどういう意味ですか?マッチャーの機能はそれなしではどういうわけか制限されていますか?Requestオブジェクトはマッチャーによってどのように使用されますか?

編集

RouteListenerが、現在のリクエスト情報(ホスト、メソッドなど)でコンテキストを更新する処理を行うことがわかりました。したがって、ルートマッチングがイベントディスパッチャを介して行われる場合、このオプションの手順は必要ありません。

4

1 に答える 1

1

新しいRequestContextを作成するとき、コンストラクターは次の引数を受け取ります。そうでない場合は、次のデフォルトが使用されます。

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

ただし、RequestContext オブジェクトは、HttpFoundation\Request オブジェクトが指定されている場合、これらの値を取得できます。これは 2.0 の API ドキュメントに記載されていないため、2.1 の新機能だと思います。

PHP グローバルから作成されたものを使用するのではなく、カスタム Request オブジェクトから独自の 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);

または、新しい Request オブジェクトを作成せずに PHP グローバルを直接適用する

$context = new RequestContext($_SERVER['REQUEST_URI']);
于 2013-03-19T13:43:46.427 に答える