Laravel: Як отримати поточну назву маршруту? (v5… v7)


226

У Laravel v4 мені вдалося отримати поточну назву маршруту, використовуючи ...

Route::currentRouteName()

Як я можу це зробити в Laravel v5 та Laravel v6 ?


який простір імен потрібно використовувати для пошуку назви маршруту? я використав Illuminate \ Support \ Фасади \ Маршрут, але результат недійсний.
Md Rashedul Hoque Bhuiyan

Це правильний клас. Ваш маршрут, мабуть, не присвоєно імені. Зауважте, що назва маршруту та URI не однакові.
lukasgeiter

Ось правильну відповідь stackoverflow.com/questions/27397487 / ...
Каміль Kiełczewski

1
Навіщо вам це потрібно?
Євген Афанасьєв

Відповіді:


439

Спробуйте це

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

або

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

від v5.1

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

Laravel v5.2

Route::currentRouteName(); //use Illuminate\Support\Facades\Route;

Або якщо вам потрібна назва дії

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

Маршрутна документація Laravel 5.2

Отримання URI запиту

Метод шляху повертає URI запиту. Отже, якщо на вхідний запит націлено http://example.com/foo/bar, метод шляху поверне foo/bar:

$uri = $request->path();

isМетод дозволяє перевірити , що вхідний запит URI відповідає заданим шаблоном. Ви можете використовувати цей *символ як підстановку під час використання цього методу:

if ($request->is('admin/*')) {
    //
}

Щоб отримати повну URL-адресу, а не лише інформацію про шлях, ви можете використовувати метод URL-адреси в екземплярі запиту:

$url = $request->url();

Laravel v5.3 ... v5.8

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

Документація щодо маршруту Laravel 5.3

Laravel v6.x ... 7.x

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

** Поточний з 11 листопада 2019 року - версія 6.5 **

Документація по маршруту Laravel 6.x

Існує можливість використовувати запит, щоб отримати маршрут

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

Чи маєте ви ідею, як відфільтрувати це, наприклад, якщо ви хочете надрукувати лише друковані маршрути для перегляду apiapi/...
utdev

6
Route::currentRouteName();ідеально :)
EM-Creations

$request::route()->getName()якщо ви вже використовуєте $ запит, або ви можете скористатися глобальним помічником request()::route()->getName().
Даніель Девхерст

@Daniel Dewhurst: Можливо, він працює на v <5.7, але з v5.7 ви не повинні використовувати його статично, натомість request()->route()->getName()це шлях.
число

5
Використання функції request()хелпер особливо корисно у видах. request()->route()->getName()- найкращий варіант.
Самуїл Шифтерович

38

Використовуючи Laravel 5.1, ви можете використовувати

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

2
це також працює, коли ви ставите його на подання як {{ route(\Request::route()->getName()) }}. Дуже дякую!
bonbon.langes

24

Знайшов спосіб знайти поточну назву маршруту для 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();

@Jonathan Я вважаю, що завжди краще використовувати повний простір імен, щоб уникнути потенційного конфлікту.
Амір Асіраф

23

Якщо вам потрібен URL , а не назва маршруту , вам не потрібно використовувати / вимагати будь-яких інших класів:

url()->current();

Це повертає помилку: "Виклик до функції члена current () на не-об'єкт". url () повертає рядок, а не об’єкт, тому я не думаю, що це могло б коли-небудь спрацювати. Можливо, ви думали про якийсь інший метод чи об’єкт замість url ()?
thelogix

1
Ні, я цим користуюся щодня. Перевірте офіційні документи
Fusion

3
Я бачу. Це працює лише у версії 5.2 або новішої . Але це досить приємно.
thelogix

23

Якщо ви хочете вибрати меню на кількох маршрутах, ви можете зробити так:

<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.3
Ренато

також перевірений у Laravel 7.5.2
аспіринема

випробуваний у Laravel 5.7
Tariqul Islam

13

Laravel 5.2 Можна використовувати

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

Це дасть вам назву поточного маршруту.


7
Це насправді неправильно. name()метод буде додавати або змінювати ім'я, в той час як getName()метод повертає його.
Арон Ротвевель

9

В 5.2 ви можете використовувати запит безпосередньо з:

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

або за допомогою хелперного методу:

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

Приклад виводу:

"home.index"

2
Хелперний метод найкращий. Працює з laravel-5.6
Євген Афанасьєв

6

Найкоротшим способом є фасад маршруту \Route::current()->getName()

Це також працює у laravel 5.4. *


5

У дії контролера ви можете просто зробити:

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

5

Ви можете використовувати в шаблоні:

<?php $path = Route::getCurrentRoute()->getPath(); ?>
<?php if (starts_with($path, 'admin/')) echo "active"; ?>


4

Доступ до поточного маршруту

Отримати поточну назву маршруту в шаблонах Blade

{{ Route::currentRouteName() }}

для отримання додаткової інформації https://laravel.com/docs/5.5/routing#accessing-the-current-route


Дякуємо за належну відповідь, втратили 30 хвилин, намагаючись марних пропозицій.
Crasher

3

Доступ до поточного маршруту (v5.3 і далі)

Ви можете використовувати поточний, currentRouteName та currentRouteAction методи на фасаді маршруту для доступу до інформації про маршрут, що обробляє вхідний запит:

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

Зверніться до документації API як для базового класу фасаду маршруту, так і для екземпляра Route, щоб переглянути всі доступні методи.

Довідка: https://laravel.com/docs/5.2/routing#accessing-the-current-route





1

Дивлячись на те, \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');
}


1

Ви можете скористатися методом нижче:

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

У версії Laravel> 6.0 ви можете скористатися наведеними нижче методами:

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();


0

У файлі Helper,

Ви можете використовувати Route::current()->uri()поточну URL-адресу.

Отже, якщо ви порівнюєте назву маршруту з встановленням активного класу в меню, то було б добре, якщо ви використовуєте

Route::currentRouteName() щоб отримати назву маршруту та порівняти


0

з якихось причин я не міг використовувати жодне з цих рішень. так що я просто оголосив мій маршрут , web.phpяк $router->get('/api/v1/users', ['as' => 'index', 'uses' => 'UserController@index'])і в моєму контролері я отримав назву маршруту , з допомогою $routeName = $request->route()[1]['as'];якої $requestє \Illuminate\Http\Request $requesttypehinted параметраindex методіUserController

використовуючи Люмен 5.6. Сподіваюся, це комусь допоможе.


0

Рішення:

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

0

Ви можете використовувати наступний код, щоб отримати назву маршруту у файлі леза

request()->route()->uri
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.