2015-07-19 116 views
1

我正在爲每個視圖自動獲取資產(.css,.js)的函數。因此,它工作得很好,讓我們說,「http://mywebsite.com/displayitems」 /家/約等Laravel 5.1 - 獲取當前路線

但自從我寫了使用$_SERVER['REQUEST_URI']的功能,我想出了一個問題,當我有一個像/displayitems/1因爲路線「/ 1「。

當時在Laravel 4.x我有一個很好的方式來做到這一點,但可悲的是它在Laravel 5.4中不能以相同的方式工作。

我一直在通過互聯網搜索一個很好的方法來獲得當前的路線,但沒有成功。問題是我必須忽略請求URL中的任何參數。

如果任何人有線索,或者我做錯了,有一個完全不同的,更好的方法來做到這一點?

PS我目前的功能:

public static function getAllRouteAssets() { 
    $route = $_SERVER['REQUEST_URI']; 
    if($route == "/") { 
     $tag = '<link href="' . asset("assets/css/pages/home.css") . '" rel="stylesheet" type="text/css"/>'; 
    } 
    else { 
     // CSS 
     $tag = '<link href="' . asset("assets/css/pages" . $route . ".css") . '" rel="stylesheet" type="text/css"/>'; 
    } 
    echo $tag; 

    //TODO: Check if file exists, homepage condition, js... 
} 

回答

6

你可以試試這個:

// Add the following (`use Illuminate\Http\Request`) statement at top your the class 

public static function getAllRouteAssets(Request $request) 
{ 
    // Get the current route 
    $currentRoute = $request->route(); 
} 

更新(從IOC /服務容器獲得請求實例,並調用route()獲得當前的路線):

app('request')->route(); // Current route has been retrieved 

如果您想將當前路由作爲參數傳遞給您的getAllRouteAssets方法,那麼您必須更改typehint或通過Request並從getAllRouteAssets方法中調用route方法。

+0

嘿。非常感謝。我在我的主佈局文件中使用這個函數來加載標題HTML標記中的資源。如何獲取當前請求中的.blade.php文件(作爲參數傳遞給'\ App \ Helper \ getAllRouteAssets();'? 再次感謝! –

+0

檢查更新後的@Ariel :-) –

+0

對不起帶着這麼多問題再次讓你煩惱。 一旦我有請求對象,我想獲得請求實例的staticPrefix。 通過var_dumping實例,我意識到staticPrefix是私有的,它是受保護的「編譯」成員。 如何訪問它,因爲它受到保護? 我想要做的是讓我們說,如果我有像「website.com/displayitem/21333」這樣的路線,這樣我可以獲得「/ displayitem」並使用此值來加載特定於此頁面的資產。 再次感謝並對不起。 –

2

我知道這是有點老了,但是有,讓你整個查詢路徑的方法:

$request->getPathInfo();

但請注意,如果你正在尋找讀取查詢這是不行的字符串以及。 (僅供參考,Laravel 5不支持默認的查詢字符串)

您可以按獲取來自查詢字符串的GET變量:

$request->input('id');

例子:

http://laravel.com/api/users/?id=123將使用返回/api/users使用$request->input('id');

0

我使用Laravel 5.5.20。我還需要獲得部分路線而不需要參數。 (?)路線是沒有問號web.php定義,例如:

Route::get('board/{param_1}/{param_2}', '[email protected]'); 

在這種情況下,我沒有看到Route類直接方法,無需URL參數,以獲得一部分。 這裏是我得到的靜態部分(/板):

... use Illuminate\Support\Facades\Route; .. $staticPrefix = Route::getCurrentRequest()->route()->getCompiled()->getStaticPrefix(); ...