В Laravel 4 мне удалось получить имя текущего маршрута, используя...
Route::currentRouteName()
Как я могу сделать это в 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(); //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
, метод пути вернет foo/bar
:
$uri = $request->path();
Метод is
позволяет убедиться, что URI входящего запроса соответствует заданному шаблону. Вы можете использовать символ *
в качестве подстановочного знака при использовании этого метода:
if ($request->is('admin/*')) {
//
}
Чтобы получить полный URL-адрес, а не только информацию о пути, вы можете использовать метод url в экземпляре запроса:
$url = $request->url();
Для Laravel 5.2 и 5.3
$route = Route::current();
$name = Route::currentRouteName();
$action = Route::currentRouteAction();
Документация по маршруту Laravel 5.3
Маршрутная документация Laravel 5.2
Существует возможность использовать запрос для получения маршрута
$request->route()->getName();
Используя 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()
Это даст вам текущее имя маршрута.
В 5.2 вы можете использовать запрос напрямую:
$request->route()->getName();
или с помощью вспомогательного метода:
request()->route()->getName();
Пример вывода:
"home.index"
Кратчайший путь - Фасад маршрута \Route::current()->getName()
Это также работает в Laravel 5.4. *
Вы можете использовать в шаблоне:
<?php $path = Route::getCurrentRoute()->getPath(); ?>
<?php if (starts_with($path, 'admin/')) echo "active"; ?>
В действии контроллера вы можете просто сделать:
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' => '[email protected]'
]);
Сейчас в Laravel 5.3
я вижу, что можно сделать так же, как вы пытались:
$route = Route::current();
$name = Route::currentRouteName();
$action = Route::currentRouteAction();
https://laravel.com/docs/5.3/routing#accessing-the-current-route
Request::path();
лучше, и помните Use Request;
Доступ к текущему маршруту (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
Я использовал для получения названия маршрута в larvel 5.3
Request::path()
Рассматривая \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');
}
Доступ к текущему маршруту
Получить текущее название маршрута в шаблонах Blade
{{ Route::currentRouteName() }}
для получения дополнительной информации https://laravel.com/docs/5.5/routing#accessing-the-current-route
$request->route()->getName();
В файле помощника
Для получения текущего URL-адреса можно использовать Route::current()->uri()
.
Следовательно, если вы сравниваете свое имя маршрута, чтобы установить активный класс в меню, тогда было бы хорошо, если вы используете
Route::currentRouteName()
, чтобы получить имя маршрута и сравнить
по некоторым причинам я не мог использовать ни одно из этих решений. поэтому я просто объявил свой маршрут в web.php
как $router->get('/api/v1/users', ['as' => 'index', 'uses' => '[email protected]'])
и в мой контроллер Я получил имя маршрута, используя $routeName = $request->route()[1]['as'];
какой $request
является указанным типом параметра \Illuminate\Http\Request $request
в методе index
UserController
используя Lumen 5.6. Надеюсь, это кому-нибудь поможет.
Решение:
$routeArray = app('request')->route()->getAction();
$controllerAction = class_basename($routeArray['controller']);
list($controller, $route) = explode('@', $controllerAction);
echo $route;
На мой взгляд, самым простым решением является использование этого помощника:
request()->route()->getName()
Документы см. по этой ссылке.
Я перепробовал все решения, предложенные для Laravel 5.x, но в Laravel 6.x ничего не получалось.
Итак, я использовал это:
Route::current()->uri()