Laravel: Как узнать текущее название маршрута? (v5… v7)

226

В Laravel v4 мне удалось получить текущее название маршрута, используя ...

Route::currentRouteName()

Как я могу сделать это в Laravel v5 и Laravel v6 ?

Г-н Рашедул Хоке Бхуиян
источник
какое пространство имен я должен использовать, чтобы найти имя маршрута? Я использовал Illuminate \ Support \ Facades \ Route, но результат равен нулю.
Md Rashedul Hoque Bhuiyan
Это правильный класс. Вероятно, вашему маршруту не присвоено имя. Обратите внимание, что имя маршрута и URI не совпадают.
lukasgeiter
Вот правильный ответ stackoverflow.com/questions/27397487/…
Камиль Килчевски
1
Зачем вам это нужно?
Евгений Афанасьев

Ответы:

440

Попробуй это

Route::getCurrentRoute()->getPath();

или

\Request::route()->getName()

от v5.1

use Illuminate\Support\Facades\Route;
$currentPath= Route::getFacadeRoot()->current()->uri();

Laravel v5.2

Route::currentRouteName(); //use Illuminate\Support\Facades\Route;

Или если вам нужно название действия

Route::getCurrentRoute()->getActionName();

Маршрутная документация Laravel 5.2

Получение 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 v5.3 ... v5.8

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

Маршрутная документация Laravel 5.3

Laravel v6.x ... 7.x

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

** По состоянию на 11 ноября 2019 года - версия 6.5 **

Маршрутная документация Laravel 6.x

Существует возможность использовать запрос для получения маршрута

$request->route()->getName();
Аднан
источник
У вас есть идея, как это отфильтровать, например, если нужно только печатать в представлении API-маршрутыapi/...
utdev
6
Route::currentRouteName();идеально :)
EM-Creations
$request::route()->getName()если вы уже используете запрос $, или вы можете использовать глобальный помощник request()::route()->getName().
Дэниел Дьюхерст
@Daniel Dewhurst: Может быть, это работает на v <5.7, но с v5.7 вы не должны использовать его статически, вместо этого request()->route()->getName()это путь.
1
5
Использование request()вспомогательной функции особенно полезно в представлениях. request()->route()->getName()это лучший вариант.
Самуил Шифтерович
38

Используя Laravel 5.1, вы можете использовать

\Request::route()->getName()
Loranger
источник
2
это также работает, когда вы ставите его на вид как {{ route(\Request::route()->getName()) }}. Спасибо!
bonbon.langes
24

Нашел способ найти текущее название маршрута работ для 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();
Г-н Рашедул Хоке Бхуиян
источник
@Jonathan Я считаю, что всегда лучше использовать полное пространство имен, чтобы избежать любого потенциального конфликта.
Амир Асираф
23

Если вам нужен URL , а не имя маршрута , вам не нужно использовать / требовать какие-либо другие классы:

url()->current();
сплавление
источник
Это возвращает ошибку: «Вызов функции-члена current () для необъекта». url () возвращает строку, а не объект, поэтому я не думаю, что это могло бы сработать. Возможно, вы думали о каком-то другом методе или объекте вместо url ()?
thelogix
1
Нет, я использую это ежедневно. Проверьте официальные документы
Fusion
3
Понимаю. Это работает только в версии 5.2 или выше . Но это довольно мило.
thelogix
23

Если вы хотите выбрать меню на нескольких маршрутах, вы можете сделать так:

<li class="{{ (Request::is('products/*') || Request::is('products') || Request::is('product/*') ? 'active' : '') }}"><a href="{{url('products')}}"><i class="fa fa-code-fork"></i>&nbsp; Products</a></li>

Или, если вы хотите выбрать только одно меню, вы можете просто сделать так:

<li class="{{ (Request::is('/users') ? 'active' : '') }}"><a href="{{url('/')}}"><i class="fa fa-envelope"></i>&nbsp; Users</a></li>

Также проверено в Laravel 5.2

Надеюсь, это поможет кому-то.

Webistan
источник
также протестирован в Laravel 5.3
Ренато Лиибке
также протестирован в Laravel 7.5.2
аспиринемага
протестирован в Laravel 5.7
Tariqul Islam
13

Laravel 5.2 Вы можете использовать

$request->route()->getName()

Это даст вам текущее название маршрута.

Джалвин Вохра
источник
7
Это на самом деле неверно. name()метод будет добавлять или изменять имя, в то время как getName()метод возвращает его.
Арон Роттвил
9

В 5.2 вы можете использовать запрос напрямую с:

$request->route()->getName();

или с помощью вспомогательного метода:

request()->route()->getName();

Пример вывода:

"home.index"
Джонатан
источник
2
Хелперный метод самый лучший. Работает с laravel-5.6
Евгений Афанасьев
6

Кратчайший путь - это Фасадный маршрут \Route::current()->getName()

Это также работает в Laravel 5.4. *

WhipsterCZ
источник
5

В действии контроллера вы можете просто сделать:

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'
]);
Богдан Герван
источник
5

Вы можете использовать в шаблоне:

<?php $path = Route::getCurrentRoute()->getPath(); ?>
<?php if (starts_with($path, 'admin/')) echo "active"; ?>
Ли Ли
источник
4

Доступ к текущему маршруту

Получить текущее название маршрута в шаблонах Blade

{{ Route::currentRouteName() }}

для получения дополнительной информации https://laravel.com/docs/5.5/routing#accessing-the-current-route

Йогеш Чатрола
источник
Спасибо за правильный ответ, потерял 30 минут, пытаясь бесполезные предложения.
Крахер
3

Доступ к текущему маршруту (v5.3 и далее)

Вы можете использовать методы current, currentRouteName и currentRouteAction на фасаде Route для доступа к информации о маршруте, обрабатывающем входящий запрос:

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

Обратитесь к документации API для базового класса фасада Route и экземпляра Route, чтобы просмотреть все доступные методы.

Ссылка: https://laravel.com/docs/5.2/routing#accessing-the-current-route

Amitesh
источник
3

Request::path(); лучше, и не забудьте use Request;

worldask
источник
1

Я использовал для получения названия маршрута в Larvel 5.3

Request::path()

Дипак Колхе
источник
1

Глядя на это, \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');
}
кругозор
источник
1

На мой взгляд, самым простым решением является использование этого помощника:

request()->route()->getName()

Для документов, смотрите эту ссылку

DenBrown
источник
1

Вы можете использовать ниже метод:

Route::getCurrentRoute()->getPath();

В версии Laravel> 6.0, Вы можете использовать следующие методы:

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();
vaibhavmht225
источник
0

В файле Helper,

Вы можете использовать, Route::current()->uri()чтобы получить текущий URL.

Следовательно, если вы сравните название вашего маршрута, чтобы установить активный класс в меню, было бы хорошо, если вы используете

Route::currentRouteName() узнать название маршрута и сравнить

Анкит Патель
источник
0

по некоторым причинам я не мог использовать ни одно из этих решений. так что я просто объявил мой маршрут , web.phpкак $router->get('/api/v1/users', ['as' => 'index', 'uses' => 'UserController@index'])и в моем контроллере я получил название маршрута , с помощью $routeName = $request->route()[1]['as'];которой $requestявляется \Illuminate\Http\Request $requesttypehinted параметраindex методеUserController

используя Lumen 5.6. Надеюсь, это кому-нибудь поможет.

MajidJafari
источник
0

Решение :

$routeArray = app('request')->route()->getAction();
$controllerAction = class_basename($routeArray['controller']);
list($controller, $route) = explode('@', $controllerAction);
echo $route;
Кундан Рой
источник
0

Вы можете использовать приведенный ниже код, чтобы получить имя маршрута в блейд-файле

request()->route()->uri
ягник девани
источник