长话短说:如何获取使用某个组件的应用程序的所有控制器。
故事:我的应用程序中有多个控制器,其中一些使用组件。
public $components = array('MyPlugin.MyComponent');
在组件或其他地方,是否有办法找出哪些控制器包含此组件,以便列出它们?
答案 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);
}
}
那里有更好的解决方案吗?