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 ?

Md Rashedul Hoque Bhuiyan
sumber
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
Inilah jawaban yang benar stackoverflow.com/questions/27397487/…
Kamil Kiełczewski
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();
Adnan
sumber
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()
loranger
sumber
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();
Md Rashedul Hoque Bhuiyan
sumber
@ 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();
Fusi
sumber
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.

Webistan
sumber
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.

Jalvin Vohra
sumber
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"
Jonathan
sumber
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. *

WhipsterCZ
sumber
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'
]);
Bogdan Ghervan
sumber
5

Anda dapat menggunakan dalam template:

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

Mengakses Rute Saat Ini

Dapatkan nama rute saat ini di templat Blade

{{ Route::currentRouteName() }}

untuk info lebih lanjut https://laravel.com/docs/5.5/routing#accessing-the-current-route

yogesh chatrola
sumber
Terima kasih atas jawaban yang tepat, hilang 30 menit mencoba saran yang tidak berguna.
Crasher
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

Amitesh
sumber
3

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

worldask
sumber
2
$request->route()->getName();
panqingqiang
sumber
1

Saya telah menggunakan untuk mendapatkan nama rute di larvel 5.3

Request::path()

Dipak Kolhe
sumber
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');
}
Ken
sumber
1

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

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

Untuk dokumen, lihat tautan ini

DenBrown
sumber
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();
vaibhavmht225
sumber
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

ankit patel
sumber
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.

MajidJafari
sumber
0

Solusi:

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

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

request()->route()->uri
yagnik devani
sumber