2011-11-22 210 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」,這可能是一些開發者的情況。 –