从 url 获取路由

Posted

技术标签:

【中文标题】从 url 获取路由【英文标题】:get route from url 【发布时间】:2012-01-03 23:10:16 【问题描述】:

Symfony2 中,你知道如何从控制器中的 url 找到路由吗? 我有这个例子:

$params = $router->match('/blog/my-blog-post');
// array('slug' => 'my-blog-post', '_controller' => 'AcmeBlogBundle:Blog:show')

$uri = $router->generate('blog_show', array('slug' => 'my-blog-post'));
// /blog/my-blog-post

如果我有/blog/my-blog-post,我想找到blog_show

谢谢

【问题讨论】:

【参考方案1】:

我不知道你在那个$router 中有什么,但是通过路由器服务,我在这里得到了这个:

$this->get('router')->match('/')

array
  '_controller' => string 'Namespace\Foo\MyController::indexAction'
  '_route' => string 'home'

如果你想要当前页面的路由名称,你可以从请求对象中读取它:$request->attributes->get('_route')

【讨论】:

$router:这是 symfony 文档示例。我他们的例子他们没有显示'_route'。我会用的,谢谢! ;)【参考方案2】:

我最近发现 match() 方法使用当前请求的 HTTP METHOD 来匹配请求。因此,例如,如果您正在执行 PUT 请求,它将尝试将您提供的 URL 与 PUT 方法匹配,从而导致 MethodNotAllowedException 异常(例如,获取引用者)。

在https://***.com/a/16506062/100675中查看更多信息

【讨论】:

【参考方案3】:

如果使用绝对路径,你会得到同样的错误,这是我在需要匹配引用者时所做的

$ref = str_replace("app_dev.php/", "", parse_url($request->headers->get('referer'),PHP_URL_PATH ));
$route = $this->container->get('router')->match($ref)['_route'];

【讨论】:

不错,但如果您使用的是“dev”和“prod”以外的其他环境,它就不起作用,对于某些开发人员来说可能就是这种情况。

以上是关于从 url 获取路由的主要内容,如果未能解决你的问题,请参考以下文章

无法从角度路由器获取路径或URL

没有从 url 获取 [:id] 参数,默认路由不起作用

如何从 CakePHP 中的 URL 字符串获取连接的路由?

如何从 url 或路由数据中获取控制器类型和操作信息?

nodejs从路由获取req.param

如何从给定的外部 url 获取数据会话 ID 和所有内容,而不是来自我的应用程序(路由)在 Angular 6