it-swarm-pt.tech

Como obter o nome atual da rota?

Em Laravel 4 consegui obter o nome da rota atual usando ...

Route::currentRouteName()

Como posso fazer isso em Laravel 5?

152
Md Rashedul Hoque Bhuiyan

Tente isso 

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

ou

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

de v5 +

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

Laravel 5.3

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

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

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

Você pode encontrar tudo sobre Rotas laravel na API Laravel: http://laravel.com/api/5.0/Illuminate/Routing/Router.htmlhttp://laravel.com/api/5.0/Illuminate/Routing.html

Recuperando o URI de solicitação

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

$uri = $request->path();

O método is permite verificar se o URI de solicitação recebido corresponde a um determinado padrão. Você pode usar o caractere * como um 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 da solicitação:

$url = $request->url();
315
Adnan

Usando o Laravel 5.1, você pode usar

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

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

Namespace

use Illuminate\Support\Facades\Route;

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

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

use Illuminate\Support\Facades\Route;

Route::currentRouteName();
21
Md Rashedul Hoque Bhuiyan

Se você precisar url , não nome da rota , você não precisa usar/requer outras classes:

url()->current();
19
Fusion

Se você quiser selecionar o menu em várias rotas, você pode fazer assim:

<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, você pode simplesmente fazer assim:

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

Também testado em Laravel 5.2

Espero que isso ajude alguém.

14
Webistan

Laravel 5.2 Você pode usar

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

Ele lhe dará o nome da rota atual.

9
Jalvin Vohra

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

Isso também funciona em laravel 5.4. *

6
WhipsterCZ

No 5.2, você pode usar o pedido diretamente com:

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

ou através do método auxiliar:

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

Exemplo de saída:

"home.index"
6
Jonathan

Você pode usar no modelo:

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

Agora em Laravel 5.3 estou vendo que pode ser feito da mesma forma que você tentou: 

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

https://laravel.com/docs/5.3/routing#accessing-the-current-route

4
itsazzad

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

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

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

getName() retorna o nome da rota para rotas nomeadas only, null caso contrário (mas você ainda pode explorar o objeto \Illuminate\Routing\Route para outra coisa de interesse).

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

Route::get('my/some-action', [
    'as' => 'nameOfMyRoute',
    'uses' => '[email protected]'
]);
3
Bogdan Ghervan

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

3
worldask

Acessando a rota atual (v5.3 em diante)

Você pode usar os métodos current, currentRouteName e currentRouteAction na fachada do Route para acessar informações sobre a rota que manipula a solicitação de entrada:

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

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

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

2
Amitesh

Eu tenho usado para obter o nome da rota em laravel 5.3

Request::path()

1
Dipak Kolhe

Acessando a rota atual

Obter o nome da rota atual nos modelos do Blade

{{Route :: currentRouteName ()}} para obter o nome da rota 

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

1
yogesh chatrola

Olhando para \Illuminate\Routing\Router.php você pode usar o método currentRouteNamed() injetando um roteador em seu método 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 tem o nome de qualquer um dos parâmetros fornecidos, mas cuidado com o método que usa preg_match() e percebi que isso causa um comportamento estranho com nomes de rotas pontilhadas (como 'foo.bar.done'). Há também a questão do desempenho em torno de preg_match() , Que é um grande assunto na comunidade PHP.

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

por algumas razões, não pude usar nenhuma dessas soluções. então eu acabei de declarar minha rota em web.php como $router->get('/api/v1/users', ['as' => 'index', 'uses' => '[email protected]']) e no meu controller eu tenho o nome da rota usando $routeName = $request->route()[1]['as']; qual $request é \Illuminate\Http\Request $request typehinted parâmetro em index método de UserController

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

0
MajidJafari

Em um arquivo auxiliar,

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

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

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

0
ankit patel
$request->route()->getName();
0
panqingqiang

Solução:

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