2014-01-07 24 views
11

我需要選擇CakePHP 2.4中的控制器並顯示寫入其中的所有功能。我發現如何列出這個問題的控制器&回答線程Stack Overflow但我現在需要的是一個特定的控制器,我需要獲取它包含的所有函數的列表。如何在cakephp中獲取控制器中的所有功能列表

這裏我做了什麼

public function getControllerList() { 

    $controllerClasses = App::objects('controller'); 
    pr($controllerClasses); 
    foreach($controllerClasses as $controller) { 

     $actions = get_class_methods($controller); 
     echo '<br/>';echo '<br/>'; 
     pr($actions); 

    } 
} 

PR($ controllerClasses);給我的控制器列表如下

Array 
(
    [0] => AppController 
    [1] => BoardsController 
    [2] => TeamsController 
    [3] => TypesController 
    [4] => UsersController 
) 

但是pr($ actions);什麼... :(

在這裏你走最後的工作片斷,我需要

方式

http://www.cleverweb.nl/cakephp/list-all-controllers-in-cakephp-2/

public function getControllerList() { 

     $controllerClasses = App::objects('controller'); 
     foreach ($controllerClasses as $controller) { 
      if ($controller != 'AppController') { 
       // Load the controller 
       App::import('Controller', str_replace('Controller', '', $controller)); 
       // Load its methods/actions 
       $actionMethods = get_class_methods($controller); 
       foreach ($actionMethods as $key => $method) { 

        if ($method{0} == '_') { 
         unset($actionMethods[$key]); 
        } 
       } 
       // Load the ApplicationController (if there is one) 
       App::import('Controller', 'AppController'); 
       $parentActions = get_class_methods('AppController'); 
       $controllers[$controller] = array_diff($actionMethods, $parentActions); 
      } 
     } 
     return $controllers; 
    } 
+0

你知道我最喜歡的黑旗歌是什麼嗎? 「給我給我給我」這就是全部想說的,你做了什麼努力來實現這個目標?我還編輯了這個問題,以便更清楚地說明你正在討論的框架。你不能簡單地去「給我這個!」,並期望人們這樣做。 – JakeGould

+1

對不起,這小小的給我....我會在幾分鐘內更新我的代碼。 –

+1

謝謝!剛剛投票,因爲這是一個有效的問題,代碼顯示你知道你在做什麼。 – JakeGould

回答

11

像這樣的東西應該做的伎倆: https://github.com/dereuromark/cakephp-sandbox/blob/master/Plugin/Sandbox/Controller/SandboxAppController.php#L12

它基本上使用一個非常基本的PHP功能:

$actions = get_class_methods($Controller); 

然後得到家長的方法:

$parentMethods = get_class_methods(get_parent_class($Controller)); 

最後,使用和array_diff你在該控制器中的實際行動:

$actions = array_diff($actions, $parentMethods); 

,那麼你仍然可以過濾掉不必要的行動。

+0

要走的路....這個鏈接真的有助於瞭解更多... thakyou非常... –

相關問題