Я работаю над функцией автоматического получения ресурсов (.css, .js) для каждого представления. Так что это прекрасно работает, скажем, «http://mywebsite.com/displayitems«, / дома, / о и т. д.
Но так как я написал функцию, используя $_SERVER['REQUEST_URI']
, У меня возникла проблема, когда у меня был маршрут, как /displayitems/1
из-за «/ 1» в маршруте.
Тогда в Laravel 4.x у меня был отличный способ сделать это, но, к сожалению, он не работает так же, как в Laravel 5.4.
Я искал в интернете хороший способ получить текущий маршрут, но безуспешно. Дело в том, что я должен игнорировать любые параметры в URL запроса.
Если у кого-то есть подсказка, или, может быть, я делаю это неправильно, и есть совершенно другой, лучший способ сделать это?
P.S Моя текущая функция:
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...
}
Вы можете попробовать это:
// 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 / Service и вызвать route()
чтобы получить текущий маршрут):
app('request')->route(); // Current route has been retrieved
Если вы хотите передать текущий маршрут в качестве параметра вашему getAllRouteAssets
метод, то вы должны изменить typehint
или передать Request
и позвонить route
метод изнутри getAllRouteAssets
метод.
Я знаю, что это немного устарело, но есть метод, который дает вам полный путь запроса:
$request->getPathInfo();
Тем не менее, обратите внимание, что это не сработает, если вы хотите также получить строку запроса. (К вашему сведению, Laravel 5 не поддерживает строки запросов по умолчанию)
Вы можете индивидуально получить переменные GET из строк запроса:
$request->input('id');
Пример:
http://laravel.com/api/users/?id=123
вернется /api/users
с помощью getPathInfo()
а также 123
с помощью $request->input('id');
Я использую Laravel 5.5.20. Мне также нужно было получить часть маршрута без параметров получения. Маршруты определены без знака вопроса (?) В web.php, например:
Route::get('board/{param_1}/{param_2}', 'BoardController@index');
В этом случае я не видел прямой метод в классе Route для получения части без параметров url.
Вот как я получил статическую часть (/ доска):
...
use Illuminate\Support\Facades\Route;
..
$staticPrefix = Route::getCurrentRequest()->route()->getCompiled()->getStaticPrefix();
...