2015-10-06 46 views
1

是否有獲得其功能名稱控制器列表如下任何內置的方法:是否有任何內置的方法獲取所有控制器列表與函數名稱?

$routes = array( 
       'contoller1' => array('index','delete','store'), 
       'contoller2' => array('index','delete','show'), 
       'contoller3' => array('show','insertData','delete'), 
       ...... 
       .. 
      ); 

也許有可能從路線找到控制器:: getRoutes() - > getRoutes()。 var_dump(Route::getRoutes()->getRoutes());

但是當你輸入php artisan routesphp artisan route:list,根據框架版本,它得到所有的路線和相關控制器的列表,它會返回與大量的信息

+0

在laravel,有單獨的文件爲每個控制器就像笨? –

+0

我需要帶控制器名稱和函數名稱的二維數組。 –

回答

1

您可以使用getRoutes然後getPathgetAction

// Get a collection of all the routes 
$routeCollection = Route::getRoutes(); 

// Create your base array of routes 
$routes = []; 

// loop through the collection of routes 
foreach ($routeCollection as $route) { 

    // get the action which is an array of items 
    $action = $route->getAction(); 

    // if the action has the key 'controller' 
    if (array_key_exists('controller', $action)) { 

     // explode the string with @ creating an array with a count of 2 
     $explodedAction = explode('@', $action['controller']); 

     // check to see if an array exists for the controller name 
     if (!isset($routes[$explodedAction[0]])) { 

      // if not create it, this will look like 
      // $routes['controllerName'] 
      $routes[$explodedAction[0]] = []; 
     } 
     // set the add the method name to the controller array 
     $routes[$explodedAction[0]][] = $explodedAction[1]; 
    } 
} 

// show the glory of your work 
dd($routes); 
+0

我實際上需要二維數組,其中鍵將是控制器名稱和值數組包含函數名稱。我在上面的公寓 –

+0

@PayerAhammed我更新了我的答案。 – whoacowboy

+0

謝謝@whoacowboy。這意味着我必須用上面的代碼來做到這一點,沒有內置的方法找到這個? –

1

的一個非常大的陣列。

所以,如果你進入源代碼,你可以看到如何得到你正在尋找的東西。

https://github.com/laravel/framework/blob/4.2/src/Illuminate/Foundation/Console/RoutesCommand.php

線82到112告訴你如何路由編譯成可顯示的格式。

無恥地從源代碼中剽竊以供參考。

/** 
* Compile the routes into a displayable format. 
* 
* @return array 
*/ 
protected function getRoutes() 
{ 
    $results = array(); 

    foreach ($this->routes as $route) 
    { 
     $results[] = $this->getRouteInformation($route); 
    } 

    return array_filter($results); 
} 

/** 
* Get the route information for a given route. 
* 
* @param \Illuminate\Routing\Route $route 
* @return array 
*/ 
protected function getRouteInformation(Route $route) 
{ 
    $uri = implode('|', $route->methods()).' '.$route->uri(); 

    return $this->filterRoute(array(
     'host' => $route->domain(), 
     'uri' => $uri, 
     'name' => $route->getName(), 
     'action' => $route->getActionName(), 
     'before' => $this->getBeforeFilters($route), 
     'after' => $this->getAfterFilters($route) 
    )); 
} 

您可能只想遍歷ang獲取操作名稱。 $route->getActionName();

還是簡單的方法:

$routes = app()['router']->getRoutes(); 

    $controllers = []; 
    foreach ($routes as $route) { 
     $controllers[] = $route->getAction(); 
    } 

    $collection = []; 
    foreach ($controllers as $c) { 
     explode ("@" , $c, 1) 
     if (!isset($collection[$c[0]])) { 
      $collection[$c[0]] = []; 
     } 
     $collection[$c[0]][] = $c[1]; 
    } 

    dd($collection); 
+0

我實際上需要二維數組,其中鍵將是控制器名稱和值數組包含函數名稱。 –

+0

@PayerAhammed - 請參閱最新的答案。它完全沒有經過測試,並在飛行中寫入,所以可能會包含錯誤,所以不要複製和粘貼它說不起作用!但希望它能指出你正確的方向。 – Gravy

+0

它說'explode()期望參數2是字符串,給定的數組' –

相關問題