2014-11-10 16 views
13

Sto cercando di ottenere l'azione del percorso corrente, ma non sono sicuro di come procedere. In Laravel 4 stavo usando Route::currentRouteAction() ma ora è un po 'diverso.Laravel 5 come si ottiene il nome dell'azione del percorso?

Sto provando a fare Route::getActionName() nel mio controller ma continua a darmi metodo non trovato.

<?php namespace App\Http\Controllers; 

use Route; 

class HomeController extends Controller 
{ 
    public function getIndex() 
    { 
     echo 'getIndex'; 
     echo Route::getActionName(); 
    } 
} 
+0

Penso che il metodo venga rimosso perché i percorsi verranno creati con annotazioni in L5. – ArjanSchouten

+1

@arjan L'impostazione predefinita in L5 è ora quella normale, la stessa di L4. Le annotazioni sono ora facoltative in L5. – Laurence

risposta

18

In laravel 5 si dovrebbe utilizzare l'iniezione metodo o costruttore. Questo farà quello che vuoi:

<?php namespace App\Http\Controllers; 

use Illuminate\Routing\Route; 

class HomeController extends Controller 
{ 
    public function getIndex(Route $route) 
    { 
     echo 'getIndex'; 
     echo $route->getActionName(); 
    } 
} 
+0

Questo funziona, ottimo, un'altra domanda, come farlo nel middleware. Ad esempio, voglio impostare automaticamente la "vista" nel mio layout in base alla rotta. Ho provato a fare la stessa cosa lì nel metodo 'handle' e' __construct' ma non funziona. 'Risoluzione dipendente non risolvibile [parametro # 0 [ $ metodi]] in classe Illuminate \ Routing \ Route' – Rob

+0

Questo è WAAAAAAAAAAAAAAAAAAAAAAY troppo automagico per stare bene con. Mi piace SAPERE ESATTAMENTE cosa sta succedendo. –

+1

@ SzczepanHołyszewski - Il metodo di iniezione è un metodo standard per Laravel 5. Nulla di automatico in proposito: solo un'iniezione di dipendenza standard. – Laurence

18

per ottenere il nome di azione, è necessario utilizzare:

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

e non

echo Route::getActionName(); 
+0

grazie che ha funzionato davvero per me – Alsemany

+2

Per me il risultato è 'App \ Http \ Controllers \ AdsController @ create', quindi non è solo il nome dell'azione. È possibile ottenerlo solo? – Gediminas

3

Invece

use Illuminate\Routing\Route; 

Utilizzare questa

use Illuminate\Support\Facades\Route; 

Se si desidera ottenere l'alias del percorso, è possibile utilizzare:

Route::getCurrentRoute()->getName() 
+0

questo ha funzionato per me in laravel 5.3 –

1

Per Laravel 5.1 uso:

$route = new Illuminate\Routing\Route(); 
$route->getActionName(); // Returns App\Http\Controllers\[email protected] 
$route->getAction(); // Array with full controller info 

Ci sono molti metodi utili in questa classe. Basta controllare il codice per maggiori dettagli.

4

Per ottenere il nome dell'azione percorso sulla Middleware lo faccio:

<?php 
namespace App\Http\Middleware; 

use Closure; 
use Illuminate\Routing\Router; 

class HasAccess { 

    protected $router; 

    public function __construct(User $user, Router $router) 
    { 
     $this->router = $router; 
    } 

    public function handle($request, Closure $next) 
    { 
     $action_name = $this->router->getRoutes()->match($request)->getActionName(); 
     //$action_name will have as value 'App\Http\Controllers\[email protected]' 
     //Now you can do what you want whit the action name 
     return $next($request); 
    } 
} 

EDIT: Si farà non ottenere i percorsi che sono protetti da questo middleware :(

3

di ottenere solo nome di azione (senza nome del controller):

list(, $action) = explode('@', Route::getCurrentRoute()->getActionName()); 
3

di ottenere solo il nome del metodo è possibile utilizzare ...

$request->route()->getActionMethod() 

o con una facciata ...

Route::getActionMethod() 
1

Per ottenere solo nome dell'azione in laravel 5,4

explode('@', Route::getCurrentRoute()->getActionName())[1]

Non riesci a trovare un modo migliore, da utilizzare in vista, in una line ...

0

È possibile utilizzare per ottenere i dettagli del controller formano la richiesta stessa

$request->route()->getAction() 
0

In Laravel 5.5 se si desidera solo il nome metodo/azione i.e. mostra, modifica, metodo personalizzato ecc ...fai questo

Route::getCurrentRoute()->getActionMethod() 

Non c'è bisogno di usare esplodi o lista per ottenere il metodo effettivo da chiamare. Grazie a Laravel che ci ha pensato.

Problemi correlati