2011-11-22 161 views
9

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_show当我有/blog/my-blog-post

谢谢

回答

16

我不知道你有什么在$router,但与路由器服务,我在这里得到这个:

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

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

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

+0

$路由器匹配引荐时,得到同样的错误:它是symfony的文档的例子。我以他们的例子他们不显示'_route'。我会用它,谢谢! ;) – bux

1

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

见多https://stackoverflow.com/a/16506062/100675

1

你可以,如果使用绝对路径,这是我做过什么需要

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

不错,但如果你使用的其他环境不是“dev”和“prod”,这可能是一些开发者的情况。 –