2015-06-02 13 views
5

Ich bin neu in Laravel und möchte Liste aller Controller und Liste der Aktion in diesem Controller abrufen. Möchten Sie nur wissen, ob es eine Möglichkeit gibt, eine Liste aller Controller sowie alle Methoden nach Code zu erhalten?Liste aller Controller und Aktionen in Laravel 5

Danke, DJ

+0

Was möchten Sie erreichen, einige Web-Service-Sachen? –

+0

Hi @KA_lin Ich baue ein zugriffsbezogenes System, in dem ich den Zugriff auf Aktionen und Controller auf Rollenbasis erlauben möchte. Ich werde einen Bildschirm haben, in dem super admin Controller und entsprechende Aktion auswählen kann und die bestimmte Rolle Zugriff auf diese Route erhält. – Deejay

+0

Dies könnte Ihre Frage von einem kurzen lesen beantworten: http://StackOverflow.com/Questions/16672064/Laravel-Roles-and-Authentication-to-Routes –

Antwort

10

Wie Sie erklären, dass Sie die Controller-Aktionen kennen müssen, scheint es, dass die Aktionen bereits Routen zugeordnet sind, was bedeutet, dass Sie die Routen verwenden können, um die Liste der zugeordneten Controller und Aktionen abzurufen. Der folgende Code wird ein Array der registrierten Route Controller-Aktionen erzeugen:

$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']; 
    } 
} 

Diese Routen ignorieren, die Verschlüsse abgebildet haben, die Sie nicht brauchen. Wohlgemerkt, Sie müssen eventuell Übereinstimmungen von Routen filtern, die von Drittanbieter-Paketen registriert wurden.

+0

Gute Sachen. Funktioniert ziemlich gut. Danke für das Teilen. – TodStoychev

+0

Kann auch so kommen. $ routes = Route :: getRoutes(); –

-1

das Lauf Versuchen:

$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 />'; 
    } 
} 

Es sollte Ausgang alle Controller (alles von der Controller-Klasse geerbt) und deren Methoden.

Ich bin nicht sicher, wie zu sagen, welche der Methoden sind eigentliche Controller-Aktionen. Wenn Sie Controller-Routen verwenden, die mit "get", "post" oder "any" beginnen, ist dies der Fall. Wenn Sie jedoch direkte Links verwenden, ist dies nicht der Fall.

+0

Hallo @MaGnetas das wird mir die Liste aller Methoden zurückgeben, die mit dem Controller verbunden sind, zB habe ich nur 3 Methoden in meinem Controller erklärt, aber es gibt mir 28 Aktionen zurück. – Deejay

+0

Wenn das das einzige Problem ist, das Sie möglicherweise nur definierte (nicht vererbte) Methoden auf diese Weise extrahieren können: 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; 
}