2016-07-27 52 views
0

我試圖獲得app/Model下的所有模型的完整列表。在CakePHP中獲取模型列表2

已經嘗試App::objects('Model')但它只檢索加載模型。

這可能在CakePHP 2中嗎?

+0

使用的蛋糕2.8它給所有的模型,而不僅僅是那些裝 – arilia

回答

0

經過一番研究,我發現App::objects('Model')返回app/Models下的所有模型,並且不包括插件模型。

要包括所有的模型(應用程序模型和插件模型)我創建了一個功能:

/** 
* Get models list. 
* 
* @return array 
*/ 
public static function getModels() { 

    // Get app models 
    $models = App::objects('Model'); 

    $models = array_combine($models, $models); 

    // Get plugins models 
    $pluginsFolder = new Folder(APP . 'Plugin'); 

    $plugins = $pluginsFolder->read(); 

    foreach ($plugins[0] as $plugin) { 

     $pluginModels = App::objects($plugin . '.Model'); 

     foreach ($pluginModels as $pluginModel) { 

      $models[$plugin . '.' . $pluginModel] = $plugin . '.' . $pluginModel; 

     } 

    } 

    // Exclude tableless and application models 
    $dataSource = ConnectionManager::getDataSource('default'); 

    $sources = $dataSource->listSources(); 

    foreach($models as $key => $model) { 

     $table = Inflector::tableize(self::modelName($key)); 

     if (stripos($model, 'AppModel') > -1 || !in_array($table, $sources)) { 

      unset($models[$key]); 

     } 

    } 

    return $models; 

}