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


226

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

Route::currentRouteName()

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


какое пространство имен я должен использовать, чтобы найти имя маршрута? Я использовал Illuminate \ Support \ Facades \ Route, но результат равен нулю.
Md Rashedul Hoque Bhuiyan

Это правильный класс. Вероятно, вашему маршруту не присвоено имя. Обратите внимание, что имя маршрута и URI не совпадают.
lukasgeiter


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()

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

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


также протестирован в 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. *


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





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()

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


1

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

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

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

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();


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. Надеюсь, это кому-нибудь поможет.


0

Решение :

$routeArray = app('request')->route()->getAction();
$controllerAction = class_basename($routeArray['controller']);
list($controller, $route) = explode('@', $controllerAction);
echo $route;

0

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

request()->route()->uri
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.