Я пытаюсь получить текущее название маршрута, используя Laravel 5.
В laravel 4 я смог сделать это с помощью Route :: currentRouteName () .
Как я могу сделать это в laravel 5?
благодаря
Попробуй это
Route::getCurrentRoute()->getPath();
или
\Request::route()->getName()
от v5. +
use Illuminate\Support\Facades\Route; $currentPath= Route::getFacadeRoot()->current()->uri();
Laravel 5.3
Route::currentRouteName();
Или, если вам нужно имя действия
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();
Используя 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();
Если вам нужен URL-адрес , а не имя маршрута , вам не нужно использовать / требовать какие-либо другие классы:
url()->current();
Если вы хотите выбрать выбранное меню на нескольких маршрутах, вы можете сделать следующее:
<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
Надеюсь, это поможет кому-то.
Laravel 5.2 Вы можете использовать
$request->route()->getName()
Он даст вам текущее название маршрута.
Вы можете использовать в шаблоне:
<?php $path = Route::getCurrentRoute()->getPath(); ?> <?php if (starts_with($path, 'admin/')) echo "active"; ?>
Самый короткий путь – это Route facade \Route::current()->getName()
Теперь в Laravel 5.3
я вижу, что можно сделать так, как вы пытались:
$route = Route::current(); $name = Route::currentRouteName(); $action = Route::currentRouteAction();
https://laravel.com/docs/5.3/routing#accessing-the-current-route
В действии контроллера вы можете просто сделать:
public function someAction(Request $request) { $routeName = $request->route()->getName(); }
$request
здесь разрешен сервисом Laravel.
getName()
возвращает имя маршрута только для именованных маршрутов , но в противном случае (но вы все равно можете изучить объект \Illuminate\Routing\Route
для чего-то интересного).
Другими словами, вы должны определить свой маршрут таким образом, чтобы вернуть «nameOfMyRoute»:
Route::get('my/some-action', [ 'as' => 'nameOfMyRoute', 'uses' => 'MyController@someAction' ]);
Request::path();
лучше, и не забудьте Use Request;
В 5.2 вы можете напрямую использовать запрос:
$request->route()->getName();
или через вспомогательный метод:
request()->route()->getName();
Пример вывода:
"home.index"
Я использовал для получения названия маршрута в larvel 5.3
Request::path()
В файле помощника,
Для получения текущего URL-адреса можно использовать Route::current()->uri()
.
Следовательно, если вы сравниваете свое имя маршрута, чтобы установить активный класс в меню, тогда было бы хорошо, если бы вы использовали
Route::currentRouteName()
чтобы получить имя маршрута и сравнить
Глядя на \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'); }