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 ?

Md Rashedul Hoque Bhuiyan
fonte
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
Aqui é resposta certa stackoverflow.com/questions/27397487/...
Kamil Kiełczewski
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();
Adnan
fonte
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()
Loranger
fonte
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();
Md Rashedul Hoque Bhuiyan
fonte
@ 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();
Fusão
fonte
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.

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

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

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

Você pode usar no modelo:

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

Acessando a rota atual

Obter o nome da rota atual nos modelos Blade

{{ Route::currentRouteName() }}

para obter mais informações https://laravel.com/docs/5.5/routing#accessing-the-current-route

yogesh chatrola
fonte
Obrigado por uma resposta adequada, perdi 30 minutos tentando sugestões inúteis.
Crasher
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

Amitesh
fonte
3

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

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

Eu usei para obter o nome da rota no larvel 5.3

Request::path()

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

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

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

Para os documentos, consulte este link

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

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

MajidJafari
fonte
0

Solução:

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

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

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