Как получить текущее название маршрута?
в 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 в 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 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()
Это даст вам текущее Наименование маршрута.
вы можете использовать в шаблоне:
<?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()
чтобы получить название маршрута и сравнить
Доступ К Текущему Маршруту
получить текущее имя маршрута в шаблонах Blade
{{ Route:: currentRouteName ()}}, чтобы получить имя маршрута
дополнительная информация https://laravel.com/docs/5.5/routing#accessing-the-current-route
по некоторым причинам я не мог использовать ни одно из этих решений. поэтому я просто объявил свой маршрут в web.php
as $router->get('/api/v1/users', ['as' => 'index', 'uses' => 'UserController@index'])
и в моем контроллере я получил название маршрута, используя $routeName = $request->route()[1]['as'];
, который $request
is \Illuminate\Http\Request $request
typehinted параметр в index
метод UserController
использование Люмена 5.6. Надеюсь, это кому-то поможет.