Как получить текущее название маршрута?

142

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

Route::currentRouteName()

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

  • 0
    какое пространство имен я должен использовать, чтобы найти имя маршрута? Я использовал Illuminate \ Support \ Facades \ Route, но результат равен нулю.
  • 0
    Это правильный класс. Вероятно, вашему маршруту не присвоено имя. Обратите внимание, что имя маршрута и URI не совпадают.
Показать ещё 2 комментария
Теги:
routes
laravel-5
laravel-5.5
laravel-routing
current-working-directory

19 ответов

294
Лучший ответ

Попробуй это

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, метод path вернет foo/bar:

$uri = $request->path();

Метод is позволяет проверить, что URI входящего запроса соответствует заданному шаблону. Вы можете использовать символ * в качестве подстановочного знака при использовании этого метода:

if ($request->is('admin/*')) {
    //
}

Чтобы получить полный URL, а не только информацию о пути, вы можете использовать метод url в экземпляре запроса:

$url = $request->url();
  • 0
    У вас есть идея, как отфильтровать это, например, если нужно только печатать в представлении API- api/...
  • 2
    Route::currentRouteName(); идеально :)
Показать ещё 4 комментария
31

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

\Request::route()->getName()
  • 2
    это также работает, когда вы помещаете его в представление как {{ route(\Request::route()->getName()) }} . Спасибо!
22

Найден способ поиска текущего имени маршрута для 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();
  • 0
    Кстати, вам не нужно импортировать все пространство имен для фасада. use Route; будет достаточно. Это только одно из преимуществ использования фасадов в Laravel.
19

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

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

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

<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

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

9

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

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

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

  • 7
    Это на самом деле неверно. метод name() добавит или изменит имя, а метод getName() вернет его.
6

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

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

6

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

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

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

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

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

"home.index"
  • 2
    Хелперный метод самый лучший. Работает с Laravel-5.6
5

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

<?php $path = Route::getCurrentRoute()->getPath(); ?>
<?php if (starts_with($path, 'admin/')) echo "active"; ?>
4

Сейчас в Laravel 5.3 я вижу, что можно сделать так же, как вы пытались:

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

https://laravel.com/docs/5.3/routing#accessing-the-current-route

3

Request::path(); лучше, и помните Use Request;

3

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

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'
]);
  • 0
    Не работает в Laravel 5.0
1

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

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

{{Route :: currentRouteName()}}, чтобы получить название маршрута

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

1

Доступ к текущему маршруту (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(), введя Router в свой метод контроллера. Например:

use Illuminate\Routing\Router;
public function index(Request $request, Router $router) {
   return view($router->currentRouteNamed('foo') ? 'view1' : 'view2');
}

или используя фасад маршрута:

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

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

Request::path()

0

Решение:

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

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

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

0

В файле помощника

Для получения текущего URL-адреса можно использовать Route::current()->uri().

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

Route::currentRouteName(), чтобы получить имя маршрута и сравнить

Ещё вопросы

Сообщество Overcoder
Наверх
Меню