2015-07-19 4 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(); 
} 

Update (Получить экземпляр запроса от IoC контейнера/Service и вызвать route() получить текущий маршрут):

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

Если вы хотите передать текущий маршрут в качестве параметра к своему getAllRouteAssets, то вам необходимо изменить typehint или передать Request и вызвать метод route из getAllRouteAssets.

+0

Эй. Большое спасибо. Я использую эту функцию в своем основном файле макета для загрузки активов в HTML-тег заголовка.Как я могу получить текущий запрос в этом файле .blade.php (передать как параметр в '\ App \ Helper \ getAllRouteAssets();'? Еще раз спасибо! –

+0

Проверьте обновленный @Ariel :-) –

+0

Прошу прощения чтобы раздражать вас снова с таким количеством вопросов. Как только у меня есть объект запроса, я хочу получить staticPrefix экземпляра запроса. Путем var_dumping экземпляра я понял, что staticPrefix является приватным, он является частью «скомпилированного», который защищен. Как я могу получить к нему доступ, так как он защищен? Что я хотел сделать, допустим, если у меня есть маршрут типа «website.com/displayitem/21333», таким образом я могу получить «/ displayitem» и использовать это значение для загрузки активов, специфичных для этой страницы. Спасибо и еще раз. –

2

Я знаю, что это немного старый, но есть метод, который дает вам полный путь запроса:

$request->getPathInfo();

Однако, обратите внимание, что это не будет работать, если вы хотите, чтобы принести запрос строка также. (FYI, Laravel 5 не поддерживает строки запроса по умолчанию)

Вы можете самостоятельно забрать ГЭТ переменные из строки запроса по:

$request->input('id');

Пример:

http://laravel.com/api/users/?id=123 вернется /api/users с помощью getPathInfo() и 123 с использованием $request->input('id');

0

Я использую Laravel 5.5.20. Мне также нужно было пройти часть маршрута без параметров. Маршруты определяются без знака вопроса в web.php, как, например, (?):

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

В этом случае я не вижу прямой метод в классе маршрута, чтобы получить часть без параметров URL. Вот как я статическую часть (/ платы):

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