CakePHP:使用组件X列出所有控制器

时间:2014-04-08 13:08:12

标签: cakephp components cakephp-2.3 controllers

长话短说:如何获取使用某个组件的应用程序的所有控制器。

故事:我的应用程序中有多个控制器,其中一些使用组件。

public $components = array('MyPlugin.MyComponent');

在组件或其他地方,是否有办法找出哪些控制器包含此组件,以便列出它们?

2 个答案:

答案 0 :(得分:2)

我不这么认为,因为组件被加载到当前活动的控制器。

当用户输入url时,它会在服务器端由CakePHP解析为您的控制器,并且只为此请求创建了这个。

为了尝试使用某个组件查找控制器,您可以按App::objects('Controller')搜索所有控制器,然后您可以尝试实例化每个Controller并读取它的$components属性。这与你在答案中提出的几乎相同,也有点hacky(但可以采取基类参数IMO)。

答案 1 :(得分:0)

事实证明它似乎很简单,但我不确定这是否是正确的方法,因为它对我来说似乎很不好看:

$controllers = App::objects('controller');
foreach($controllers as $controller) {
    App::import('Controller', str_replace('Controller', '', $controller));
    $properties = get_class_vars($controller);

    if(isset($properties['components']) && (isset($properties['components']['MyPlugin.MyComponent']) || in_array('MyPlugin.MyComponent', $properties['components']))) {
        $this->editable[] = str_replace('Controller', '', $controller);
    }
}

那里有更好的解决方案吗?