Laravel: Bagaimana Cara Mendapatkan Nama Rute Saat Ini? (v5 ... v7)


226

Di Laravel v4 saya bisa mendapatkan nama rute saat ini menggunakan ...

Route::currentRouteName()

Bagaimana saya bisa melakukannya di Laravel v5 dan Laravel v6 ?


namespace mana yang harus saya gunakan untuk menemukan nama rute? Saya telah menggunakan Illuminate \ Support \ Facades \ Route tetapi hasilnya nol.
Md Rashedul Hoque Bhuiyan

Itu kelas yang benar. Rute Anda mungkin tidak memiliki nama yang ditetapkan. Perhatikan bahwa nama rute dan URI tidak sama.
lukasgeiter


1
Mengapa Anda membutuhkannya?
Yevgeniy Afanasyev

Jawaban:


440

Coba ini

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

atau

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

dari v5.1

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

Laravel v5.2

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

Atau jika Anda membutuhkan nama tindakan

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

Dokumentasi rute 5.2 Laravel

Mengambil URI Permintaan

Metode jalur mengembalikan URI permintaan. Jadi, jika permintaan yang masuk ditargetkan http://example.com/foo/bar, metode jalur akan kembali foo/bar:

$uri = $request->path();

The isMetode memungkinkan Anda untuk memverifikasi bahwa permintaan yang masuk URI cocok dengan pola yang diberikan. Anda dapat menggunakan *karakter sebagai wildcard ketika menggunakan metode ini:

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

Untuk mendapatkan URL lengkap, bukan hanya info jalur, Anda dapat menggunakan metode url pada contoh permintaan:

$url = $request->url();

Laravel v5.3 ... v5.8

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

Dokumentasi rute 5.3 Laravel

Laravel v6.x ... 7.x

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

** Saat ini pada 11 November 2019 - versi 6.5 **

Dokumentasi rute Laravel 6.x

Ada opsi untuk menggunakan permintaan untuk mendapatkan rute

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

Apakah Anda punya ide bagaimana memfilter ini misalnya jika seseorang hanya ingin mencetak dalam tampilan api api/...
route

6
Route::currentRouteName();perfect :)
EM-Creations

$request::route()->getName()jika Anda sudah menggunakan $ request, atau Anda bisa menggunakan global helper request()::route()->getName().
Daniel Dewhurst

@ Daniel Dewhurst: Mungkin ini bekerja pada v <5.7, tetapi dengan v5.7 Anda tidak boleh menggunakannya secara statis, sebagai gantinya request()->route()->getName()adalah cara untuk pergi.
1stthomas

5
Menggunakan request()fungsi helper sangat berguna dalam tampilan. request()->route()->getName()adalah pilihan terbaik.
Samuel Shifterovich

38

Menggunakan Laravel 5.1, Anda dapat menggunakan

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

2
ini juga berfungsi saat Anda meletakkannya di tampilan sebagai {{ route(\Request::route()->getName()) }}. Terima kasih banyak!
bonbon.langes

24

Menemukan cara untuk menemukan nama rute saat ini berfungsi untuk laravel v5 , v5.1.28 dan v5.2.10

Namespace

use Illuminate\Support\Facades\Route;

dan

$currentPath= Route::getFacadeRoot()->current()->uri();

Untuk Laravel laravel v5.3 Anda cukup menggunakan:

use Illuminate\Support\Facades\Route;

Route::currentRouteName();

@ Jonathan Saya yakin selalu lebih baik menggunakan namespace lengkap untuk menghindari potensi konflik.
Amir Asyraf

23

Jika Anda memerlukan url , bukan nama rute , Anda tidak perlu menggunakan / mengharuskan kelas lain:

url()->current();

Ini mengembalikan kesalahan: "Panggil ke fungsi anggota saat ini () pada non-objek". url () mengembalikan string, bukan objek, jadi saya tidak berpikir ini bisa berhasil. Mungkin Anda memikirkan beberapa metode atau objek lain, alih-alih url ()?
thelogix

1
Nah, saya menggunakan ini setiap hari. Periksa dokumen resmi
Fusion

3
Saya melihat. Ini hanya berfungsi di versi 5.2 atau lebih tinggi . Tapi ini cukup bagus.
thelogix

23

Jika Anda ingin memilih menu pada banyak rute, Anda dapat melakukannya seperti ini:

<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>

Atau jika Anda ingin memilih hanya satu menu, Anda dapat melakukannya seperti ini:

<li class="{{ (Request::is('/users') ? 'active' : '') }}"><a href="{{url('/')}}"><i class="fa fa-envelope"></i>&nbsp; Users</a></li>

Juga diuji dalam Laravel 5.2

Semoga ini bisa membantu seseorang.


juga diuji dalam Laravel 5.3
Renato Liibke

juga diuji dalam Laravel 7.5.2
aspirinemaga

diuji di Laravel 5.7
Tariqul Islam

13

Laravel 5.2 Anda dapat menggunakan

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

Ini akan memberi Anda nama rute saat ini.


7
Ini sebenarnya salah. yang name()metode akan menambah atau mengubah nama, sedangkan getName()metode mengembalikannya.
Aron Rotteveel

9

Di 5.2, Anda dapat menggunakan permintaan secara langsung dengan:

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

atau melalui metode pembantu:

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

Contoh keluaran:

"home.index"

2
Metode penolong adalah yang terbaik. Bekerja dengan laravel-5.6
Yevgeniy Afanasyev

6

Cara terpendek adalah fasad rute \Route::current()->getName()

Ini juga berfungsi di laravel 5.4. *


5

Dalam aksi pengontrol, Anda bisa melakukan:

public function someAction(Request $request)
{
    $routeName = $request->route()->getName();
}

$request di sini diselesaikan oleh wadah layanan Laravel.

getName()mengembalikan nama rute untuk rute yangnull ditentukan saja, jika tidak (tetapi Anda masih bisa menjelajahi \Illuminate\Routing\Routeobjek untuk hal lain yang menarik).

Dengan kata lain, rute Anda harus didefinisikan seperti ini untuk mengembalikan "nameOfMyRoute":

Route::get('my/some-action', [
    'as' => 'nameOfMyRoute',
    'uses' => 'MyController@someAction'
]);

5

Anda dapat menggunakan dalam template:

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



3

Mengakses Rute Saat Ini (v5.3 dan seterusnya)

Anda dapat menggunakan metode current, currentRouteName, dan currentRouteAction pada fasad Rute untuk mengakses informasi tentang rute yang menangani permintaan yang masuk:

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

Rujuk ke dokumentasi API untuk kelas yang mendasari fasad Rute dan instance Rute untuk meninjau semua metode yang dapat diakses.

Referensi: https://laravel.com/docs/5.2/routing#accessing-the-current-route


3

Request::path(); lebih baik, dan ingat untuk use Request;



1

Saya telah menggunakan untuk mendapatkan nama rute di larvel 5.3

Request::path()


1

Melihat \Illuminate\Routing\Router.phpAnda dapat menggunakan metode ini currentRouteNamed()dengan menyuntikkan Router di metode controller Anda. Sebagai contoh:

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

atau menggunakan fasad Rute:

public function index(Request $request) {
   return view(\Route::currentRouteNamed('foo') ? 'view1' : 'view2');
}

Anda juga dapat menggunakan metode ini is()untuk memeriksa apakah rute tersebut dinamai salah satu parameter yang diberikan, tetapi berhati-hatilah dengan metode ini preg_match()dan saya telah mengalaminya untuk menyebabkan perilaku aneh dengan nama rute bertitik (seperti 'foo.bar.done'). Ada juga masalah kinerja preg_match() yang merupakan subjek besar dalam komunitas PHP.

public function index(Request $request) {
    return view(\Route::is('foo', 'bar') ? 'view1' : 'view2');
}

1

Menurut pendapat saya solusi yang paling mudah adalah menggunakan bantuan ini:

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

Untuk dokumen, lihat tautan ini


1

Anda dapat menggunakan metode di bawah ini:

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

Dalam versi Laravel> 6.0, Anda dapat menggunakan metode di bawah ini:

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();


0

Dalam file Helper,

Anda dapat menggunakan Route::current()->uri()untuk mendapatkan URL saat ini.

Oleh karena itu, Jika Anda membandingkan nama rute Anda dengan mengatur kelas aktif pada menu maka akan lebih baik jika Anda menggunakan

Route::currentRouteName() untuk mendapatkan nama rute dan membandingkan


0

untuk beberapa alasan, saya tidak dapat menggunakan solusi ini. jadi aku hanya menyatakan rute saya di web.phpsebagai $router->get('/api/v1/users', ['as' => 'index', 'uses' => 'UserController@index'])dan di controller saya saya mendapat nama dari rute menggunakan $routeName = $request->route()[1]['as'];yang $requestadalah \Illuminate\Http\Request $requesttypehinted parameter di indexmetodeUserController

menggunakan Lumen 5.6. Semoga itu bisa membantu seseorang.


0

Solusi:

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

0

Anda dapat menggunakan kode di bawah ini untuk mendapatkan nama rute di file blade

request()->route()->uri
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.