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

в 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 5.1, вы можете использовать

\Request::route()->getName()

нашел способ найти текущее название маршрута работает для 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>&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

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


что 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


Request::path(); лучше, и не забудьте Use Request;


в 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'
]);

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

Request::path()


смотрим \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. Надеюсь, это кому-то поможет.