Laravel : 현재 경로 이름을 얻는 방법? (v5… v7)


226

Laravel v4에서는 다음을 사용하여 현재 경로 이름을 얻을 수있었습니다 ...

Route::currentRouteName()

Laravel v5Laravel v6 에서 어떻게 할 수 있습니까?


경로 이름을 찾기 위해 어떤 네임 스페이스를 사용해야합니까? Illuminate \ Support \ Facades \ Route를 사용했지만 결과가 null입니다.
Md Rashedul Hoque Bhuiyan

그것이 올바른 수업입니다. 경로에 이름이 지정되지 않았을 수 있습니다. 경로 이름과 URI는 동일하지 않습니다.
lukasgeiter


1
왜 필요할까요?
Yevgeniy Afanasyev

답변:


439

이 시도

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

또는

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

v5.1부터

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

라 라벨 v5.2

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

또는 액션 이름이 필요한 경우

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

라 라벨 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();

라 라벨 v5.3 ... v5.8

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

라 라벨 5.3 루트 문서

라 라벨 v6.x ... 7.x

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

** 2019 년 11 월 11 일 현재-버전 6.5 **

Laravel 6.x 경로 문서

경로를 얻기 위해 요청을 사용하는 옵션이 있습니다

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

예를 들어 view api route로만 인쇄하려는 경우이를 필터링하는 방법에 대한 아이디어가 api/...
있습니까?

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

$request::route()->getName()이미 $ request를 사용 중이거나 전역 도우미를 사용할 수 있습니다 request()::route()->getName().
Daniel Dewhurst

@Daniel Dewhurst : v <5.7에서 작동하지만 v5.7에서는 정적으로 사용해서는 안되며 대신 request()->route()->getName()갈 길입니다.
1stthomas

5
request()도우미 기능을 사용하면 뷰에서 특히 유용합니다. request()->route()->getName()최선의 선택입니다.
사무엘 시프터로 비치

38

Laravel 5.1을 사용하면

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

2
이것은 뷰에을 넣을 때도 작동합니다 {{ route(\Request::route()->getName()) }}. 정말 고마워!
bonbon.langes

24

laravel v5 , v5.1.28v5.2.10에 대한 현재 경로 이름을 찾는 방법을 찾았 습니다.

네임 스페이스

use Illuminate\Support\Facades\Route;

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

Laravel laravel v5.3의 경우 다음을 사용할 수 있습니다.

use Illuminate\Support\Facades\Route;

Route::currentRouteName();

@Jonathan 잠재적 인 충돌을 피하기 위해 항상 전체 네임 스페이스를 사용하는 것이 좋습니다.
Amir Asyraf

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

Laravel 7.5.2에서 테스트
aspirinemaga

Laravel 5.7에서 테스트
Tariqul 이슬람

13

Laravel 5.2 사용할 수 있습니다

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

현재 경로 이름을 알려줍니다.


7
실제로 잘못되었습니다. name()그동안 방법을 추가하거나 이름을 변경 할 getName()방법이 그것을 반환합니다.
Aron Rotteveel

9

5.2에서는 다음과 같이 직접 요청을 사용할 수 있습니다.

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

또는 도우미 방법을 통해 :

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

출력 예 :

"home.index"

2
도우미 방법이 가장 좋습니다. laravel-5.6과 함께 작동
Yevgeniy Afanasyev

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"; ?>



3

현재 경로에 액세스 (v5.3 이상)

Route 파사드에서 current, currentRouteName 및 currentRouteAction 메서드를 사용하여 들어오는 요청을 처리하는 경로에 대한 정보에 액세스 할 수 있습니다.

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

접근 가능한 모든 메소드를 검토하려면 Route 파사드의 기본 클래스와 Route 인스턴스에 대한 API 설명서를 참조하십시오.

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




1

나는 larvel 5.3에서 경로 이름을 얻는 데 사용했습니다.

Request::path()


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

내 생각에 가장 쉬운 해결책은이 도우미를 사용하는 것입니다.

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

문서에 대해서는 이 링크를 참조하십시오


1

아래 방법을 사용할 수 있습니다.

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

Laravel 버전> 6.0에서 다음 방법을 사용할 수 있습니다.

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();


0

도우미 파일에서

Route::current()->uri()현재 URL을 얻는 데 사용할 수 있습니다 .

따라서 메뉴에서 활성 클래스를 설정하기 위해 경로 이름을 비교하면 다음을 사용하면 좋습니다.

Route::currentRouteName() 경로 이름을 얻고 비교


0

어떤 이유로 든, 나는 이러한 솔루션을 사용할 수 없었습니다. 난 그냥 내 길을 선언하므로 web.php으로 $router->get('/api/v1/users', ['as' => 'index', 'uses' => 'UserController@index'])내 컨트롤러에서 나는 사용하여 경로의 이름을 가지고 있다 에 매개 변수를 typehinted 의 방법을$routeName = $request->route()[1]['as'];$request\Illuminate\Http\Request $requestindexUserController

루멘 사용 5.6. 누군가에게 도움이되기를 바랍니다.


0

해결책 :

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

0

벨로우즈 코드를 사용하여 블레이드 파일에서 경로 이름을 가져올 수 있습니다.

request()->route()->uri
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.