2011-06-29 38 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.