Laravel: Como obter o nome da rota atual? (v5 ... v7)


226

No Laravel v4, consegui obter o nome da rota atual usando ...

Route::currentRouteName()

Como posso fazer isso no Laravel v5 e no Laravel v6 ?


qual namespace devo usar para encontrar o nome da rota? Eu usei Illuminate \ Support \ Facades \ Route, mas o resultado é nulo.
Md Rashedul Hoque Bhuiyan

Essa é a classe correta. Sua rota provavelmente não tem um nome atribuído. Observe que o nome da rota e o URI não são os mesmos.
Lukasgeiter 5/05


1
Por que você precisaria disso?
Yevgeniy Afanasyev

Respostas:


440

Tente isto

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

ou

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

da v5.1

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

Laravel v5.2

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

Ou se você precisar do nome da ação

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

Documentação de rotas do Laravel 5.2

Recuperando o URI da Solicitação

O método path retorna o URI da solicitação. Portanto, se a solicitação de entrada for direcionada http://example.com/foo/bar, o método path retornará foo/bar:

$uri = $request->path();

O ismétodo permite verificar se o URI da solicitação de entrada corresponde a um determinado padrão. Você pode usar o *caractere como curinga ao utilizar este método:

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

Para obter o URL completo, não apenas as informações do caminho, você pode usar o método url na instância de solicitação:

$url = $request->url();

Laravel v5.3 ... v5.8

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

Documentação de rota do Laravel 5.3

Laravel v6.x ... 7.x

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

** Atual a partir de 11 de novembro de 2019 - versão 6.5 **

Documentação de rota do Laravel 6.x

Existe uma opção para usar solicitação para obter rota

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

Você tem uma idéia de como filtrar essa, por exemplo, se um só quer imprimir nas rotas vista apiapi/...
utdev

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

$request::route()->getName()se você já estiver usando a solicitação $ ou pode usar o assistente global request()::route()->getName().
Daniel Dewhurst

@ Daniel Dewhurst: Talvez funcione na v <5.7, mas com a v5.7 você não deve usá-la estaticamente, request()->route()->getName()é o caminho a percorrer.
1stthomas

5
O uso da request()função auxiliar é particularmente útil nas visualizações. request()->route()->getName()é a melhor opção.
Samuel Shifterovich 11/11/19

38

Usando o Laravel 5.1, você pode usar

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

2
isso também funciona quando você o coloca na exibição como {{ route(\Request::route()->getName()) }}. Muito obrigado!
Bonbon.langes

24

Foi encontrada uma maneira de encontrar o nome da rota atual para o laravel v5 , v5.1.28 e v5.2.10

Namespace

use Illuminate\Support\Facades\Route;

e

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

Para o Laravel laravel v5.3, você pode simplesmente usar:

use Illuminate\Support\Facades\Route;

Route::currentRouteName();

@ Jonathan Eu acredito que é sempre melhor usar o espaço para nome completo para evitar qualquer conflito em potencial.
Amir Asyraf 31/03

23

Se você precisar de URL , não de nome da rota , não precisará usar / exigir nenhuma outra classe:

url()->current();

Isso retorna um erro: "Chamada para uma função de membro current () em um não-objeto". url () retorna uma string, não um objeto, então eu não acho que isso poderia ter funcionado. Talvez você estivesse pensando em algum outro método ou objeto, em vez de url ()?
Thelogix

1
Não, eu uso isso diariamente. Verifique documentos oficiais
Fusion

3
Entendo. Isso funciona apenas na versão 5.2 ou superior . Mas é bem legal.
Thelogix #

23

Se você deseja selecionar o menu em várias rotas, faça o seguinte:

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

Ou, se você quiser selecionar apenas um menu, basta fazer o seguinte:

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

Também testado no Laravel 5.2

Espero que isso ajude alguém.


também testado no Laravel 5.3
Renato Liibke

também testado no Laravel 7.5.2
aspirinemaga

testado no Laravel 5.7
Tariqul Islam

13

Laravel 5.2 Você pode usar

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

Fornecerá o nome atual da rota.


7
Isso está realmente incorreto. o name()método adicionará ou alterará o nome, enquanto o getName()método o retornará.
Aron Rotteveel

9

Na 5.2, você pode usar a solicitação diretamente com:

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

ou pelo método auxiliar:

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

Exemplo de saída:

"home.index"

2
O método auxiliar é o melhor. Funciona com laravel-5.6
Yevgeniy Afanasyev

6

O caminho mais curto é a fachada da rota \Route::current()->getName()

Isso também funciona no laravel 5.4. *


5

Em uma ação do controlador, você pode apenas fazer:

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

$request aqui é resolvido pelo contêiner de serviço do Laravel.

getName()retorna o nome da rota apenas para rotas nomeadas , nullcaso contrário (mas você ainda pode explorar o \Illuminate\Routing\Routeobjeto para algo mais interessante).

Em outras palavras, você deve ter sua rota definida assim para que "nameOfMyRoute" seja retornado:

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

5

Você pode usar no modelo:

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



3

Acessando a rota atual (v5.3 em diante)

Você pode usar os métodos current, currentRouteName e currentRouteAction na fachada da rota para acessar informações sobre a rota que trata da solicitação recebida:

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

Consulte a documentação da API para a classe subjacente da fachada Route e a instância Route para revisar todos os métodos acessíveis.

Referência: https://laravel.com/docs/5.2/routing#accessing-the-current-route


3

Request::path(); é melhor e lembre-se de use Request;




1

Observando, \Illuminate\Routing\Router.phpvocê pode usar o método currentRouteNamed()injetando um roteador no método do seu controlador. Por exemplo:

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

ou usando a fachada da rota:

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

Você também pode usar o método is()para verificar se a rota é nomeada com algum dos parâmetros fornecidos, mas cuidado com esse método preg_match()e experimentei causar um comportamento estranho com nomes de rotas pontilhadas (como 'foo.bar.done'). Há também a questão do desempenho em torno do preg_match() qual é um grande assunto na comunidade PHP.

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

1

Na minha opinião, a solução mais fácil é usar este auxiliar:

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

Para os documentos, consulte este link


1

Você pode usar o método abaixo:

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

Na versão Laravel> 6.0, você pode usar os métodos abaixo:

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();


0

Em um arquivo auxiliar,

Você pode usar Route::current()->uri()para obter o URL atual.

Portanto, se você comparar o nome da sua rota para definir a classe ativa no menu, seria bom se você usasse

Route::currentRouteName() para obter o nome da rota e comparar


0

por alguns motivos, não consegui usar nenhuma dessas soluções. então eu declarei minha rota em web.phpcomo $router->get('/api/v1/users', ['as' => 'index', 'uses' => 'UserController@index'])e no meu controlador eu tenho o nome do percurso utilizando a $routeName = $request->route()[1]['as'];qual $requesté \Illuminate\Http\Request $requesttypehinted parâmetro no indexmétodo deUserController

usando o Lumen 5.6. Espero que ajude alguém.


0

Solução:

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

0

Você pode usar o código abaixo para obter o nome da rota no arquivo blade

request()->route()->uri
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.