2015-09-28 21 views
3

鑑於我有這樣Laravel:解析任意URL到其相應的Controller/Route?

映射(以及很多其他)任意URL我的「反向解析/決心」的URL(like http://localhost/foobar/foo)這個配置控制器(MyFoobarController)又如何?請注意:我不是在談論當前的請求,而是一種將Laravel中映射到其相應的Controller和Action(獨立於當前請求的代碼中的任何位置)的URL解析的一般方法。謝謝!

更新:它也應該正確匹配路線,其中有參數。

回答

2

您可以將URL路徑與添加到路由器的路徑進行比較。因此,讓我們把你的例子:

Route::get('/foobar', '[email protected]'); 

可以使用Route門面讓所有註冊的路線列表:

// This is your URL as a string 
$url = 'http://localhost/foobar'; 

// Extract the path from that URL 
$path = trim(parse_url($url, PHP_URL_PATH), '/'); 

// Iterate over the routes until you find a match 
foreach (Route::getRoutes() as $route) { 
    if ($route->getPath() == $path) { 
     // Access the action with $route->getAction() 
     break; 
    } 
} 

getAction方法會返回一個包含有關映射操作的相關信息的數組爲那條路線。您可以查看Illuminate\Routing\Route API,以獲取有關匹配路線後可以使用的方法的更多信息。

+0

嗯......我在這裏沒有看到關於處理參數的任何內容嗎?如果我想解析的$ url是'/ page/foo',並且它應該匹配的路由是'page /:slug',那麼$ route-> getPath()會返回什麼?當然不是比較'page/foo'的東西嗎? –