2015-06-02 7 views
5

Sono nuovo in laravel e desidero recuperare l'elenco di tutti i controller e l'elenco di azioni in quel controller. Voglio solo sapere se c'è un modo per ottenere un elenco di tutti i controller e tutti i loro metodi in base al codice?Ottieni l'elenco di tutti i controller e le azioni in laravel 5

Grazie, DJ

+0

Cosa vuoi ottenere, alcune cose del servizio web? –

+0

Salve @KA_lin sto costruendo un sistema di accesso in cui voglio consentire l'accesso alle azioni e ai controller in base al ruolo. Avrò uno schermo in cui il super amministratore può selezionare il controller e le rispettive azioni e al ruolo particolare verrà dato l'accesso a quel percorso. – Deejay

+0

Questo potrebbe rispondere alla tua domanda da una breve lettura: http://stackoverflow.com/questions/16672064/laravel-roles-and-authentication-to-routes –

risposta

10

Da come si spiega la necessità di conoscere le azioni del controllore, sembra che le azioni siano già mappate ai percorsi, il che significa che è possibile utilizzare i percorsi per ottenere l'elenco di controllori e azioni mappati. Il seguente codice genererà un array di azioni di controllo del percorso registrati:

$controllers = []; 

foreach (Route::getRoutes()->getRoutes() as $route) 
{ 
    $action = $route->getAction(); 

    if (array_key_exists('controller', $action)) 
    { 
     // You can also use explode('@', $action['controller']); here 
     // to separate the class name from the method 
     $controllers[] = $action['controller']; 
    } 
} 

Questo ignorerà percorsi che hanno chiusure mappati, che non ti servono. Intendiamoci, potrebbe essere necessario filtrare le corrispondenze dalle rotte registrate da pacchetti di terze parti.

+0

Roba buona. Funziona piuttosto bene. Grazie per la condivisione. – TodStoychev

+0

Anche in questo modo. $ routes = Route :: getRoutes(); –

-1

Provare a eseguire questo:

$classes = get_declared_classes(); 

foreach ($classes as $class) { 
    if (is_subclass_of($class, 'App\Http\Controllers\Controller')) { 
     echo $class . '<br />'; 
     $methods = get_class_methods($class); 
     foreach ($methods as $method) 
      echo '--- ' . $method . '<br />'; 
    } 
} 

Si deve uscire con tutti i controller (qualsiasi cosa ereditata dalla classe Controller) e le loro metodi.

Non sono sicuro di sapere quali dei metodi sono le azioni effettive del controller. Se usi le rotte del controller, quelle che iniziano con "get", "post" o "any", ma se stai usando link diretti non è il caso.

+0

Ciao @MaGnetas questo mi restituirà l'elenco di tutti i metodi associati al controller, ad esempio ho dichiarato solo 3 metodi nel mio controller ma mi sta restituendo 28 azioni. – Deejay

+0

Se questo è l'unico problema, potresti essere in grado di estrarre solo metodi definiti (non ereditati) in questo modo: http://stackoverflow.com/questions/3712671/get-only-declared-methods-of-a-class-in- php – MaGnetas

0
public static function Controllers() 
{ 
    $controllers = require_once base_path('vendor/composer/autoload_classmap.php'); 
    $controllers = array_keys($controllers); 
    $controllers = array_filter($controllers, function ($controller) { 
     return strpos($controller, 'App\Http\Controllers') !== false; 
    }); 
    $controllers = array_map(function ($controller) { 

     return str_replace('App\Http\Controllers\\', '', $controller); 
    }, $controllers); 

    return $controllers; 
} 
Problemi correlati