Как получить текущее название маршрута?
В Laravel 4 мне удалось получить имя текущего маршрута, используя...
Route::currentRouteName()
Как я могу сделать это в Laravel 5?
34 ответа
Попробуй это
Route::getCurrentRoute()->getPath();
или же
\Request::route()->getName()
от v5.+
use Illuminate\Support\Facades\Route;
$currentPath= Route::getFacadeRoot()->current()->uri();
Ларавел 5.3
Route::currentRouteName(); //use Illuminate\Support\Facades\Route;
Или если вам нужно название действия
Route::getCurrentRoute()->getActionName();
Вы можете найти все о маршрутах laravel в API Laravel: http://laravel.com/api/5.0/Illuminate/Routing/Router.html http://laravel.com/api/5.0/Illuminate/Routing.html
Получение URI запроса
Метод path возвращает URI запроса. Итак, если входящий запрос нацелен на http://example.com/foo/bar
метод пути вернет foo/bar
:
$uri = $request->path();
is
Метод позволяет проверить, что URI входящего запроса соответствует заданному шаблону. Вы можете использовать *
символ в качестве подстановочного знака при использовании этого метода:
if ($request->is('admin/*')) {
//
}
Чтобы получить полный URL, а не только информацию о пути, вы можете использовать метод url в экземпляре запроса:
$url = $request->url();
Используя Laravel 5.1, вы можете использовать
\Request::route()->getName()
Нашел способ найти текущее название маршрута работ для laravel v5, v5.1.28 и v5.2.10
Пространство имен
use Illuminate\Support\Facades\Route;
а также
$currentPath= Route::getFacadeRoot()->current()->uri();
Для Laravel Laravel v5.3 вы можете просто использовать:
use Illuminate\Support\Facades\Route;
Route::currentRouteName();
Если вы хотите выбрать меню на нескольких маршрутах, вы можете сделать так:
<li class="{{ (Request::is('products/*') || Request::is('products') || Request::is('product/*') ? 'active' : '') }}"><a href="{{url('products')}}"><i class="fa fa-code-fork"></i> Products</a></li>
Или, если вы хотите выбрать только одно меню, вы можете просто сделать так:
<li class="{{ (Request::is('/users') ? 'active' : '') }}"><a href="{{url('/')}}"><i class="fa fa-envelope"></i> Users</a></li>
Также протестировано в Laravel 5.2
Надеюсь, это поможет кому-то.
Если вам нужен URL, а не имя маршрута, вам не нужно использовать / требовать какие-либо другие классы:
url()->current();
В laravel 7 или 8 используйте вспомогательную функцию
Get Current Route Name
request()->route()->getName()
Чтобы проверить, является ли маршрут текущим, лучше создать свой собственный метод для класса запроса с помощью макроса
В
AppServiceProvider
В
boot
метод:
use Illuminate\Http\Request;
public function boot()
{
Request::macro('isCurrentRoute', function ($routeNames) {
return in_array(
request()->route()->getName(),
is_array($routeNames) ? $routeNames : explode(",", $routeNames)
);
});
}
Вы можете использовать этот метод в blade-сервере или контроллере
request()->isCurrentRoute('foo') // string route
request()->isCurrentRoute(['bar','foo']) //array routes
request()->isCurrentRoute('blogs,foo,bar') //string route seperated by comma
Вы можете использовать встроенный метод маршрута laravel
route()->is('home');
route()->is('blogs.*'); //using wildcard
В 5.2 вы можете использовать запрос напрямую с:
$request->route()->getName();
или с помощью вспомогательного метода:
request()->route()->getName();
Пример вывода:
"home.index"
Laravel 5.2 Вы можете использовать
$request->route()->getName()
Это даст вам текущее название маршрута.
Доступ к текущему маршруту
Получить текущее название маршрута в шаблонах Blade
{{ Route::currentRouteName() }}, чтобы получить название маршрута
для получения дополнительной информации https://laravel.com/docs/5.5/routing
Кратчайший путь - это Фасадный маршрут\Route::current()->getName()
Это также работает в Laravel 5.4.*
You can use bellow code to get route name in blade file
request()->route()->uri
Вы можете использовать в шаблоне:
<?php $path = Route::getCurrentRoute()->getPath(); ?>
<?php if (starts_with($path, 'admin/')) echo "active"; ?>
В действии контроллера вы можете просто сделать:
public function someAction(Request $request)
{
$routeName = $request->route()->getName();
}
$request
здесь разрешается сервисным контейнером Laravel.
getName()
возвращает имя маршрута только для именованных маршрутов, null
в противном случае (но вы все еще можете изучить \Illuminate\Routing\Route
объект для чего-то еще интересного).
Другими словами, ваш маршрут должен быть определен так, чтобы возвращалось "nameOfMyRoute":
Route::get('my/some-action', [
'as' => 'nameOfMyRoute',
'uses' => 'MyController@someAction'
]);
На мой взгляд, самым простым решением является использование этого помощника:
request()->route()->getName()
Для документов, смотрите эту ссылку
Сейчас в Ларавеле 5.3
Я вижу, что можно сделать так же, как вы пытались:
$route = Route::current();
$name = Route::currentRouteName();
$action = Route::currentRouteAction();
Доступ к текущему маршруту (v5.3 и далее)
Вы можете использовать методы current, currentRouteName и currentRouteAction на фасаде Route для доступа к информации о маршруте, обрабатывающем входящий запрос:
$route = Route::current();
$name = Route::currentRouteName();
$action = Route::currentRouteAction();
Обратитесь к документации API для базового класса фасада Route и экземпляра Route, чтобы просмотреть все доступные методы.
использовать помощник laravel и магические методы
request()->route()->getName()
Первое, что вы можете сделать, это импортировать пространство имен в начало класса .
use Illuminate\Support\Facades\Route;
laravel v8
$route = Route::current(); // Illuminate\Routing\Route
$name = Route::currentRouteName(); // RouteName
$action = Route::currentRouteAction(); // Action
Laravel v7,6 и 5.8
$route = Route::current();
$name = Route::currentRouteName();
$action = Route::currentRouteAction();
Не нужно ничего запоминать, когда вам нужна какая-то переменная Запроса, путемdd(request())
может оценить, какая переменная важна для вас. На изображении ниже это ясно.
Итак, если вы хотите получить путь, очевидно, этот код покажет
dd(request()->getpathInfo())
не забудьте вставитьuse Illuminate\Http\Request;
Например:
if(request()->getpathInfo()=="/logadmin"){
do somethings....
}
Смотря на \Illuminate\Routing\Router.php
Вы можете использовать метод currentRouteNamed()
введя Маршрутизатор в вашем методе контроллера. Например:
use Illuminate\Routing\Router;
public function index(Request $request, Router $router) {
return view($router->currentRouteNamed('foo') ? 'view1' : 'view2');
}
или используя фасад Route:
public function index(Request $request) {
return view(\Route::currentRouteNamed('foo') ? 'view1' : 'view2');
}
Вы также можете использовать метод is()
чтобы проверить, указан ли маршрут по какому-либо из указанных параметров, но будьте осторожны, этот метод использует preg_match()
и я испытал это, чтобы вызвать странное поведение с пунктирными именами маршрутов (например, 'foo.bar.done'
). Существует также вопрос производительности вокруг preg_match()
что является большой темой в сообществе PHP.
public function index(Request $request) {
return view(\Route::is('foo', 'bar') ? 'view1' : 'view2');
}
Вот то, что я использую, я не знаю, почему никто не упомянул об этом, потому что это отлично сработало для меня.
Route::getCurrentRoute()->uri ; // this returns a string like '/home'
Поэтому я использую его в своем
master.blade.php
файл :
...
@if ( Route::getCurrentRoute()->uri =='/dashbord' )
@include('navbar')
@endif
...
ведьма действительно помогла мне повторно использовать одни и те же представления без дублирования кода.
Вы можете использовать метод ниже:
Route::getCurrentRoute()->getPath();
В версии Laravel> 6.0 вы можете использовать следующие методы:
$route = Route::current();
$name = Route::currentRouteName();
$action = Route::currentRouteAction();
Доступ к текущему имени маршрута в контроллере
ie- http: // localhost / имя_проекта / редактировать
$request-> сегмент (1); //редактировать
(или)
$ запрос-> URL (); // http: // localhost / имя_проекта / редактировать
Решение:
$routeArray = app('request')->route()->getAction();
$controllerAction = class_basename($routeArray['controller']);
list($controller, $route) = explode('@', $controllerAction);
echo $route;
В файле Helper,
Вы можете использовать Route::current()->uri()
чтобы получить текущий URL.
Следовательно, если вы сравните название вашего маршрута, чтобы установить активный класс в меню, было бы хорошо, если вы используете
Route::currentRouteName()
узнать название маршрута и сравнить
Я использовал для получения названия маршрута в Larvel 5.3
Request::path()