2015-06-02 13 views
5

Ben laravel için yeniyim ve tüm denetleyicilerin listesini ve bu denetleyicideki eylem listesini almak istiyorum. Sadece tüm Denetleyicilerin bir listesini ve tüm Yöntemlerini kodla almanın bir yolu olup olmadığını bilmek ister misiniz?Tüm denetleyicilerin ve eylemlerin listesini alın laravel 5

+0

Bazı web hizmeti işlerini gerçekleştirmek için ne yapmak istiyorsunuz? –

+0

Merhaba @KA_lin Görevlere göre eylemlere ve denetleyicilere erişime izin vermek istediğim erişim ile ilgili bir sistem yapıyorum. Süper yöneticinin denetleyiciyi ve ilgili eylemi seçebileceği bir ekrana sahip olacağım ve özel rotanın bu rotaya erişimi verilecek. – Deejay

+0

Bu, sorunuzu kısa bir okumadan yanıtlayabilir: http://stackoverflow.com/questions/16672064/laravel-roles-and-authentication-to-routes –

cevap

10

Denetleyici eylemlerini bilmeniz gerekliliğini nasıl açıkladığınıza göre, eylemler zaten yollarla eşlenmiş gibi görünmektedir; bu, eşlenen denetleyicilerin ve eylemlerin listesini almak için rotaları kullanabileceğiniz anlamına gelir. Bu gerekmez eşleştirilmiş Kapatmaları sahip yolları dikkate almaz

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

: Aşağıdaki kod kayıtlı rota denetleyici eylemleri bir dizi üretecektir. Unutmayın, üçüncü taraf paketler tarafından kaydedilen rotalardan herhangi bir eşleşmeyi filtrelemeniz gerekebilir.

+0

İyi şeyler. Oldukça iyi çalışıyor. Paylaşım için teşekkürler. – TodStoychev

+0

Ayrıca bu şekilde alabilirsiniz. $ route = Route :: getRoutes(); –

-1

bu çalıştırmayı deneyin

sayesinde DJ:

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

Gelmeli çıktı tüm kontrolörler (Kontrolör sınıfından miras şey) ve metodları.

Yine de hangi yöntemlerin gerçek denetleyici eylemleri olduğunu nasıl anlatacağımı bilmiyorum. "Get", "post" veya "any" ile başlayanlar olacak kontrolör rotalarını kullanırsanız, ancak doğrudan bağlantı kullanıyorsanız, durum böyle değildir.

+0

Hi @MaGnetas çalıştı, bu bana denetleyiciyle bağlanmış tüm yöntemlerin listesini döndürecektir, örneğin, denetleyicimde yalnızca 3 yöntem beyan ettim, ancak 28 eylem gerçekleştiriyor. – Deejay

+0

Tek sorun bu olsaydı, yalnızca tanımlı (mirassız) yöntemleri bu şekilde ayıklayabilirsiniz: 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; 
}