2016-12-26 11 views
1

私は現在リスナーにいます。私は応答の中にいくつかのヘッダーを戻したいと思います。 $this->router->match($this->request->getPathInfo());私はこれに関する情報を持っていません。しかし、私は方法を指定しました:Symfony2の1つのルートで許可されるメソッドを知るには?

api_v2_spokespeople_collection: 
    path: /spokespeople 
    defaults: { _controller: "APIBundle:v2/Spokesperson:getCollection" } 
    methods: [GET, OPTIONS] 

"手動で"ルーティングファイルを解析する必要はありませんか?

答えて

4

あなたはルート名がある場合:

/** @var string $routeName */ 
/** @var Symfony\Component\HttpFoundation\Request $request */ 
$routeName = $request->attributes->get('_route'); 

を、あなたが@routerサービスを持っている(このサービスがあなたのリスナーに注入したようだ):

// from the controller action. 
/** @var Symfony\Bundle\FrameworkBundle\Routing\Router $router */ 
$router = $this->get('router'); 

//in your sample should be $this->router directly. 

経路の収集を通じて経路インスタンスとその情報を得ることができます。

/** @var Symfony\Component\Routing\Route $route */ 
$route = $router->getRouteCollection()->get($routeName); 

最後に、あなたが定義されたメソッドを知ってgetMethods()に呼び出す必要があります:私は `$ルートをダンプするとき、私はので、これを使用することはできません

$methods = $this->router->getRouteCollection()->get($request->get('_route'))->getMethods(); 
+0

正確に私が必要とするもの。どうも! –

0

あなたが理解しているように、現在のルートで許可されているメソッドを取得しようとしています。そうな場合:

$route = $this->request->get('_route'); 
$methods = $route->getMethods(); 
+0

:1行で

/** @var string[] $methods */ $methods = $route->getMethods(); // e.g. array('GET', 'POST') 

'私は'ヌル 'を得た。それは本当に奇妙です。 –

+3

@ fnev.euあなたのリスナーがルーティングリスナーの後に実行されていることを確認してください –

+0

@WouterJはい、それは良いです!しかし、$ routeは現在文字列です。私はrouter-> match()メソッドを試してみると、メソッドなしの配列が得られます... –

関連する問題