如何知道Symfony2中一条路由的允许方法?

时间:2016-12-26 15:04:06

标签: symfony routes http-method

我目前在听众中,我想在回复中返回一些标题。 $this->router->match($this->request->getPathInfo());我没有任何关于此的信息。但我已经指定了方法:

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

最终是否可以在不必手动"解析路由文件?

2 个答案:

答案 0 :(得分:3)

如果您有路线名称:

/** @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();

答案 1 :(得分:0)

据我所知,你将获得当前路线的允许方法。如果是,那么:

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