Как получить текущее название маршрута?
в laravel 4 я смог получить текущее название маршрута с помощью
Route::currentRouteName()
.
Как я могу сделать это в laravel 5?
18 ответов:
попробуй такое
Route::getCurrentRoute()->getPath();
или
\Request::route()->getName()
от v5.+
use Illuminate\Support\Facades\Route; $currentPath= Route::getFacadeRoot()->current()->uri();
Laravel 5.3
Route::currentRouteName(); //use Illuminate\Support\Facades\Route;
или если вам нужно имя действий
Route::getCurrentRoute()->getActionName();
вы можете найти все о Laravel Routes в Laravel API: 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();
The
is
метод позволяет проверить, что URI входящего запроса соответствует заданному шаблону. Вы можете использовать*
в качестве подстановочного знака при использовании этого метода:if ($request->is('admin/*')) { // }
чтобы получить полный URL, а не только информацию о пути, вы можете использовать метод url в запросе пример:
$url = $request->url();
нашел способ найти текущее название маршрута работает для laravel v5,У5.1.28 и У5.2.10
пространство имен
use Illuminate\Support\Facades\Route;
и
$currentPath= Route::getFacadeRoot()->current()->uri();
для Laravel laravel У5.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()
Это даст вам текущее Наименование маршрута.
самый короткий путь-это фасад маршрута
\Route::current()->getName()
Это также работает в laravel 5.4.*
вы можете использовать в шаблоне:
<?php $path = Route::getCurrentRoute()->getPath(); ?> <?php if (starts_with($path, 'admin/')) echo "active"; ?>
теперь в Laravel
5.3
Я вижу, что можно сделать так же, как вы пробовали:$route = Route::current(); $name = Route::currentRouteName(); $action = Route::currentRouteAction();
https://laravel.com/docs/5.3/routing#accessing-the-current-route
в 5.2, вы можете использовать запрос непосредственно с:
$request->route()->getName();
или через вспомогательный метод:
request()->route()->getName();
выход пример:
"home.index"
в действиях контроллера, вы могли бы просто сделать:
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' ]);
смотрим
\Illuminate\Routing\Router.php
вы можете использовать методcurrentRouteNamed()
путем впрыскивать маршрутизатор в вашем методе регулятора. Например: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'); }
доступ к текущему маршруту (v5. 3 и далее)
вы можете использовать методы current, currentRouteName и currentRouteAction на фасаде маршрута для доступа к информации о маршруте обработки входящего запроса:
$route = Route::current(); $name = Route::currentRouteName(); $action = Route::currentRouteAction();
чтобы просмотреть все доступные методы, обратитесь к документации API как для базового класса фасада маршрута, так и для экземпляра маршрута.
ссылка : https://laravel.com/docs/5.2/routing#accessing-the-current-route
в вспомогательном файле,
вы можете использовать
Route::current()->uri()
чтобы получить текущий URL.следовательно, если вы сравниваете свое имя маршрута, чтобы установить активный класс в меню, то было бы хорошо, если вы используете
Route::currentRouteName()
чтобы получить имя маршрута и сравнить
Доступ К Текущему Маршруту
получить текущее имя маршрута в шаблонах Блейда
{{ Route:: currentRouteName ()}} чтобы получить имя route
для получения дополнительной информации https://laravel.com/docs/5.5/routing#accessing-the-current-route
по некоторым причинам я не мог использовать ни одно из этих решений. поэтому я просто объявил свой маршрут в
web.php
Как$router->get('/api/v1/users', ['as' => 'index', 'uses' => 'UserController@index'])
и в моем контроллере я получил имя маршрута с помощью$routeName = $request->route()[1]['as'];
, который$request
- это\Illuminate\Http\Request $request
параметр typehinted вindex
методUserController
используя люмен 5.6. Надеюсь, это кому-то поможет.