2016-12-26 14 views
1

Я в настоящее время слушаю, и я хочу вернуть некоторые заголовки в свой ответ. $this->router->match($this->request->getPathInfo()); У меня нет информации об этом. Однако я указал методы:Как узнать допустимые методы для одного маршрута в Symfony2?

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() знать определенные методы:

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

В одной строке:

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

Точно то, что мне нужно. Спасибо! –

0

Как я понял, вы собираетесь разрешить методы для текущего маршрута. Если да, то:

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

Я не могу использовать это, потому что, когда я свалка '$ маршрут 'Я получил' null'. Это действительно странно. –

+3

@ fnev.eu убедитесь, что ваш слушатель выполнен * после * прослушивателя маршрутизации –

+0

@WouterJ да, это лучше! Но $ route теперь является строкой. когда я пытаюсь использовать метод router-> match(), я получил массив без методов ... –