まず、Symfony Testing ドキュメントのAccessing the Containerを見てください。
提供された回答は機能する可能性がありますが、 WebTestCaseクラスを拡張する場合は、クライアントを作成すると自動的に起動されるため、カーネルを特に起動する必要はありません。を使用しているようです。これは、関数$this->client
でクラスのグローバル クライアントを定義したことを意味しますsetUp()
。その場合は、次のことを行う必要があります。
$container = $this->client->getContainer();
$url = $container->get('router')->generate('name_route', array('parameter' => ' '));
$this->client
どこにも定義していない場合は、上記を次のように変更する必要があります
// if your class extended Symfony's standard WebTestCase, this would
// instead be $client = static::clientClient();
$client = static::makeClient();
$container = $this->client->getContainer();
$url = $container->get('router')->generate('name_route', array('parameter' => ' '));
Symfony のドキュメントには次のように記載されていることに注意してください。
機能テストではレスポンスのみをテストすることを強くお勧めします。しかし、非常にまれな特定の状況では、いくつかの内部オブジェクトにアクセスしてアサーションを書きたい場合があります。このような場合、依存性注入コンテナーにアクセスできます。
したがって、Symfony によれば、ルートを生成するためにコンテナに実際にアクセスするべきではありません。他のすべての例を見ると、ルートを名前で取得するのではなく、ルートのパスを呼び出すことを好むので、場合は次のようになります。
$this->client->request('GET', '/path/for/your/route',
array(),
array(),
array(
'HTTP_parameter_Header' => 'parameterHeader',
)
);