dslf46995 2016-07-27 20:19
浏览 16
已采纳

获取CakePHP 2中的模型列表

I'm trying to get a complete list of all models under app/Model.

Already tried App::objects('Model') but it only retrieves loaded models.

Is this possible in CakePHP 2?

  • 写回答

2条回答 默认 最新

  • duanjiao8007 2016-09-16 18:54
    关注

    After some research I found that App::objects('Model') returns all models under app/Models but it doesn't include Plugin models.

    To include all models (app models and plugin models) I created the next function:

    /**
     * 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;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?