Laravel: Làm thế nào để có được tên tuyến hiện tại? (v5 Vv v7)


226

Trong Laravel v4 tôi đã có thể lấy tên tuyến đường hiện tại bằng cách sử dụng ...

Route::currentRouteName()

Làm thế nào tôi có thể làm điều đó trong Laravel v5Laravel v6 ?


không gian tên nào tôi nên sử dụng để tìm tên tuyến đường? tôi đã sử dụng Illuminate \ Support \ Facades \ Route nhưng kết quả là null.
Md Rashingul Hoque Bhuiyan

Đó là lớp đúng. Tuyến đường của bạn có thể không có tên được chỉ định. Lưu ý rằng tên tuyến và URI không giống nhau.
lukasgeiter

Đây là câu trả lời đúng stackoverflow.com/questions/27397487/
Ấn

1
Tại sao bạn cần nó?
Yevgeniy Afanasyev

Câu trả lời:


439

Thử cái này

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

hoặc là

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

từ v.1.1

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

Ấu trùng v5.2

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

Hoặc nếu bạn cần tên hành động

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

Tài liệu lộ trình của Laravel 5.2

Lấy URI yêu cầu

Phương thức đường dẫn trả về URI của yêu cầu. Vì vậy, nếu yêu cầu đến được nhắm mục tiêu http://example.com/foo/bar, phương thức đường dẫn sẽ trả về foo/bar:

$uri = $request->path();

Các isphương pháp cho phép bạn để xác minh rằng yêu cầu đến URI phù hợp với một mẫu nhất định. Bạn có thể sử dụng *ký tự làm ký tự đại diện khi sử dụng phương pháp này:

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

Để có được URL đầy đủ, không chỉ là thông tin đường dẫn, bạn có thể sử dụng phương thức url trong trường hợp yêu cầu:

$url = $request->url();

Ấu trùng v5.3 ... v5.8

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

Tài liệu lộ trình của Laravel 5.3

Ấu trùng v6.x ... 7.x

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

** Hiện tại kể từ ngày 11 tháng 11 năm 2019 - phiên bản 6.5 **

Tài liệu lộ trình của Laravel 6.x

Có một tùy chọn để sử dụng yêu cầu để có được tuyến đường

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

Bạn có ý tưởng làm thế nào để lọc cái này chẳng hạn nếu người ta chỉ muốn in trong chế độ xem apiapi/...
utdev

6
Route::currentRouteName();hoàn hảo :)
EM-Creations

$request::route()->getName()nếu bạn đã sử dụng yêu cầu $ hoặc bạn có thể sử dụng trình trợ giúp toàn cầu request()::route()->getName().
Daniel Dewhurst

@Daniel Dewhurst: Có thể nó hoạt động trên v <5.7, nhưng với v5.7, bạn không được sử dụng nó một cách tĩnh, thay vào đó request()->route()->getName()là cách để đi.
1stthomas

5
Sử dụng request()chức năng trợ giúp đặc biệt hữu ích trong các khung nhìn. request()->route()->getName()là lựa chọn tốt nhất.
Samuel Shifterovich

38

Sử dụng Laravel 5.1, bạn có thể sử dụng

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

2
Điều này cũng hoạt động khi bạn đặt nó trên xem như {{ route(\Request::route()->getName()) }}. Cám ơn rất nhiều!
bonbon.langes

24

Tìm thấy một cách để tìm tên tuyến hiện tại hoạt động cho laravel v5 , v5.1.28v5.2.10

Không gian tên

use Illuminate\Support\Facades\Route;

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

Đối với Laravel laravel v5.3, bạn chỉ có thể sử dụng:

use Illuminate\Support\Facades\Route;

Route::currentRouteName();

@Jonathan Tôi tin rằng sẽ luôn tốt hơn khi sử dụng không gian tên đầy đủ để tránh mọi xung đột tiềm ẩn.
Amir Asyraf

23

Nếu bạn cần url , không phải tên tuyến , bạn không cần sử dụng / yêu cầu bất kỳ lớp nào khác:

url()->current();

Điều này trả về một lỗi: "Gọi đến một hàm thành viên hiện tại () trên một đối tượng không". url () trả về một chuỗi, không phải là một đối tượng, vì vậy tôi không nghĩ rằng điều này có thể đã hoạt động. Có lẽ bạn đã suy nghĩ về một số phương thức hoặc đối tượng khác, thay vì url ()?
thelogix

1
Không, tôi sử dụng nó hàng ngày. Kiểm tra tài liệu chính thức
Fusion

3
Tôi hiểu rồi. Điều này chỉ hoạt động trong phiên bản 5.2 trở lên . Nhưng nó khá đẹp.
thelogix

23

Nếu bạn muốn chọn menu trên nhiều tuyến đường, bạn có thể làm như thế này:

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

Hoặc nếu bạn muốn chọn chỉ một menu, bạn có thể chỉ cần làm như thế này:

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

Cũng được thử nghiệm trong Laravel 5.2

Hy vọng điều này sẽ giúp ai đó.


cũng đã thử nghiệm trong Laravel 5.3
Renato Liibke

cũng đã thử nghiệm trong Laravel 7.5.2
aspirinemaga

thử nghiệm trong Laravel 5.7
Hồi giáo Tariqul

13

Laravel 5.2 Bạn có thể sử dụng

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

Nó sẽ cung cấp cho bạn tên tuyến đường hiện tại.


7
Điều này thực sự không chính xác. các name()phương pháp sẽ thêm hoặc thay đổi tên, trong khi getName()phương thức trả về nó.
Aron Rotteveel

9

Trong 5.2, bạn có thể sử dụng yêu cầu trực tiếp với:

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

hoặc thông qua phương thức trợ giúp:

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

Ví dụ đầu ra:

"home.index"

2
Phương pháp trợ giúp là tốt nhất. Hoạt động với laravel-5.6
Yevgeniy Afanasyev

6

Con đường ngắn nhất là mặt tiền đường \Route::current()->getName()

Điều này cũng hoạt động trong laravel 5.4. *


5

Trong một hành động điều khiển, bạn chỉ có thể làm:

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

$request ở đây được giải quyết bằng container dịch vụ của Laravel.

getName()chỉ trả về tên tuyến đường cho các tuyến được đặt tên , nullnếu không (nhưng bạn vẫn có thể khám phá \Illuminate\Routing\Routeđối tượng cho mục đích khác).

Nói cách khác, bạn nên xác định tuyến đường của mình như thế này để trả lại "nameOfMyRoute":

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

5

Bạn có thể sử dụng trong mẫu:

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



3

Truy cập Tuyến đường hiện tại (v5.3 trở đi)

Bạn có thể sử dụng các phương thức hiện tại, currentRouteName và currentRouteAction trên mặt tiền Tuyến đường để truy cập thông tin về tuyến đường xử lý yêu cầu đến:

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

Tham khảo tài liệu API cho cả lớp bên dưới của mặt tiền Tuyến đường và đối tượng Tuyến đường để xem xét tất cả các phương thức có thể truy cập.

Tham khảo: https://laravel.com/docs/5.2/routing#accessing-the-civerse-route




1

Tôi đã sử dụng để có được tên tuyến đường trong larvel 5.3

Request::path()


1

Nhìn vào \Illuminate\Routing\Router.phpbạn có thể sử dụng phương pháp currentRouteNamed()bằng cách tiêm Bộ định tuyến vào phương thức điều khiển của bạn. Ví dụ:

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

hoặc sử dụng mặt tiền Tuyến đường:

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

Bạn cũng có thể sử dụng phương pháp is()để kiểm tra xem tuyến đường có được đặt tên theo bất kỳ tham số đã cho nào không, nhưng hãy cẩn thận phương pháp này sử dụng preg_match()và tôi đã trải nghiệm nó để gây ra hành vi lạ với tên tuyến đường rải rác (như 'foo.bar.done'). Ngoài ra còn có vấn đề về hiệu năng xung quanh preg_match() đó là một chủ đề lớn trong cộng đồng PHP.

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

1

Theo tôi, giải pháp đơn giản nhất là sử dụng trình trợ giúp này:

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

Đối với các tài liệu, xem liên kết này


1

Bạn có thể sử dụng phương pháp dưới đây:

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

Trong phiên bản Laravel> 6.0, Bạn có thể sử dụng các phương pháp dưới đây:

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();


0

Trong tệp Trợ giúp,

Bạn có thể sử dụng Route::current()->uri()để có được URL hiện tại.

Do đó, nếu bạn so sánh tên tuyến đường của mình để đặt lớp hoạt động trên menu thì sẽ tốt hơn nếu bạn sử dụng

Route::currentRouteName() để có được tên của tuyến đường và so sánh


0

vì một số lý do, tôi không thể sử dụng bất kỳ giải pháp nào trong số này. vì vậy tôi chỉ công bố lộ trình của tôi trong web.phpkhi $router->get('/api/v1/users', ['as' => 'index', 'uses' => 'UserController@index'])và trong điều khiển của tôi, tôi có tên của tuyến đường sử dụng $routeName = $request->route()[1]['as'];$requestđược \Illuminate\Http\Request $requesttypehinted tham số trong indexphương phápUserController

sử dụng Lumen 5.6. Hy vọng nó sẽ giúp được ai đó.


0

Giải pháp :

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

0

Bạn có thể sử dụng mã dưới đây để lấy tên tuyến đường trong tệp lưỡi cắt

request()->route()->uri
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.