2011-06-29 32 views
0

我正在创建一个应用程序,其中使用了两个插件。 为了将来的使用,我想检查两个插件是一起使用还是分开使用。 我需要检查模型是否存在,如果有的话执行一些逻辑,如果没有 - 不是。 如果我尝试如果($ this-> loadModel('Model')){etc} 我得到一个错误,说模型不存在,这是我想要的,但我不想要一个错误,防止逻辑继续。Cakephp检查模型是否存在

基本上我想:

如果(型号 - >存在()){做 - >此} 其他{做 - > somethingelse}

我使用PHP函数class_exists()尝试,但该无论Model是否存在都返回false。

回答

-1

你可以这样做:

$model = ClassRegistry::init("User"); 

如果$机型为空,这意味着用户模型不存在 您可以从每一个地方在代码中做到这一点

+3

实际上它从来没有空! 其AppModel如果无法找到该类。 你需要检查App :: import(),它返回一个成功的布尔值 – mark

+0

嗨马克,谢谢你做到了。 – Manu

+0

错了,这个init初学了一个新类,反正它与你声明的模型不匹配 –

0

我会用App::objects('model')作为2.x(不知道这是什么时候实现的)。

class AppController extents Controller { 
    private function _modelExists($modelName){ 
     $models = App::objects('model'); 
     return in_array($modelName,$models); 
    }  
} 

//Somewhere in your logic 
if($this->_modelExists('SomeModel')){ 
    //do model exists logic 
} else { 
    //do other logic 
} 

*请注意,App::objects('model')将不包含插件中的模型。你可以这样做:

$models = array_merge(
    App::objects('model'), 
    App::objects('MyPlugin.model') 
); 

你也可以做到这一点与纯PHP如下

if(class_exists('SomeModel')){ 
    //do model exists logic 
} else { 
    //do other logic 
} 
// The pitfall of this approach, is that it will not assure 
// that `SomeModel is a decedent of the `Model` class.