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

В Laravel 4 мне удалось получить имя текущего маршрута, используя...

Route::currentRouteName()

Как я могу сделать это в Laravel 5?

34 ответа

Решение

Попробуй это

Route::getCurrentRoute()->getPath();

или же

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

от v5.+

use Illuminate\Support\Facades\Route;
$currentPath= Route::getFacadeRoot()->current()->uri();

Ларавел 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.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();

Если вы хотите выбрать меню на нескольких маршрутах, вы можете сделать так:

<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

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

Если вам нужен URL, а не имя маршрута, вам не нужно использовать / требовать какие-либо другие классы:

url()->current();

В laravel 7 или 8 используйте вспомогательную функцию

       Get Current Route Name
      request()->route()->getName()

Чтобы проверить, является ли маршрут текущим, лучше создать свой собственный метод для класса запроса с помощью макроса

В AppServiceProvider В boot метод:

      use Illuminate\Http\Request;
public function boot()
    {
        Request::macro('isCurrentRoute', function ($routeNames) {
            return in_array(
                request()->route()->getName(),
                is_array($routeNames) ? $routeNames : explode(",", $routeNames)
            );
        });
    }

Вы можете использовать этот метод в blade-сервере или контроллере

      request()->isCurrentRoute('foo') // string route
request()->isCurrentRoute(['bar','foo']) //array routes
request()->isCurrentRoute('blogs,foo,bar') //string route seperated by comma

Вы можете использовать встроенный метод маршрута laravel

      route()->is('home');
route()->is('blogs.*'); //using wildcard

В 5.2 вы можете использовать запрос напрямую с:

$request->route()->getName();

или с помощью вспомогательного метода:

request()->route()->getName();

Пример вывода:

"home.index"

Laravel 5.2 Вы можете использовать

$request->route()->getName()

Это даст вам текущее название маршрута.

Доступ к текущему маршруту

Получить текущее название маршрута в шаблонах Blade

{{ Route::currentRouteName() }}, чтобы получить название маршрута

для получения дополнительной информации https://laravel.com/docs/5.5/routing

Кратчайший путь - это Фасадный маршрут\Route::current()->getName()

Это также работает в Laravel 5.4.*

You can use bellow code to get route name in blade file

request()->route()->uri

Вы можете использовать в шаблоне:

<?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' => 'MyController@someAction'
]);

На мой взгляд, самым простым решением является использование этого помощника:

request()->route()->getName()

Для документов, смотрите эту ссылку

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

Сейчас в Ларавеле 5.3 Я вижу, что можно сделать так же, как вы пытались:

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

https://laravel.com/docs/5.3/routing

Доступ к текущему маршруту (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

$request->route()->getName();

использовать помощник laravel и магические методы

      request()->route()->getName()

Первое, что вы можете сделать, это импортировать пространство имен в начало класса .

      use Illuminate\Support\Facades\Route;

laravel v8

      $route = Route::current(); // Illuminate\Routing\Route
$name = Route::currentRouteName(); // RouteName
$action = Route::currentRouteAction(); // Action

Laravel v7,6 и 5.8

      $route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

Не нужно ничего запоминать, когда вам нужна какая-то переменная Запроса, путемdd(request())может оценить, какая переменная важна для вас. На изображении ниже это ясно.

Итак, если вы хотите получить путь, очевидно, этот код покажет

      dd(request()->getpathInfo())

не забудьте вставитьuse Illuminate\Http\Request;Например:

      if(request()->getpathInfo()=="/logadmin"){
do somethings....
}

Смотря на \Illuminate\Routing\Router.php Вы можете использовать метод currentRouteNamed() введя Маршрутизатор в вашем методе контроллера. Например:

use Illuminate\Routing\Router;
public function index(Request $request, Router $router) {
   return view($router->currentRouteNamed('foo') ? 'view1' : 'view2');
}

или используя фасад Route:

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');
}

Вот то, что я использую, я не знаю, почему никто не упомянул об этом, потому что это отлично сработало для меня.

      Route::getCurrentRoute()->uri ; // this returns a string like '/home'


Поэтому я использую его в своем master.blade.phpфайл :

      ...

@if ( Route::getCurrentRoute()->uri =='/dashbord' )
   @include('navbar')
@endif
...

ведьма действительно помогла мне повторно использовать одни и те же представления без дублирования кода.

Вы можете использовать метод ниже:

Route::getCurrentRoute()->getPath();

В версии Laravel> 6.0 вы можете использовать следующие методы:

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

Доступ к текущему имени маршрута в контроллере

ie- http: // localhost / имя_проекта / редактировать

$request-> сегмент (1); //редактировать

(или)

$ запрос-> URL (); // http: // localhost / имя_проекта / редактировать

использовать помощник:

      app('request')->route()->getName()

Решение:

 $routeArray = app('request')->route()->getAction();
    $controllerAction = class_basename($routeArray['controller']);
    list($controller, $route) = explode('@', $controllerAction);
    echo $route;
      \Request::path()

Я использую это, чтобы получить текущий URI

В файле Helper,

Вы можете использовать Route::current()->uri() чтобы получить текущий URL.

Следовательно, если вы сравните название вашего маршрута, чтобы установить активный класс в меню, было бы хорошо, если вы используете

Route::currentRouteName() узнать название маршрута и сравнить

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

Request::path()

Другие вопросы по тегам