从 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 获取路由的主要内容,如果未能解决你的问题,请参考以下文章