2012-11-13 89 views
2

我最近將我的應用程序從cake 1.3.x升級到cake 2.x.現在我有一個在某些功能中使用模型的幫手。最初語法加載模型(工作1.3.x版)如何在幫助程序中使用模型 - CakePHP 2.x

 App::import('Model', $modelName); 
    $modelObject = &ClassRegistry::getObject($modelName);  
    $modelObject->find() 

現在我把它改成下面

App::uses($modelName,'Model'); 
    $modelObject = &ClassRegistry::getObject($modelName); 
    $modelObject->find() 

的問題是,這種轉換是行不通的。有人可以告訴我我在哪裏做錯了。提前感謝。

PS: 錯誤消息:
調用一個成員函數查找()一個非對象

+2

正確的語法始終只是'$ USER = ClassRegistry :: init('User')' – mark

回答

6

工作的代碼應該是

//let $modelName be User 
App::import("Model", "User"); 
$model = new User(); 
$model->find("list"); 

我希望這將幫助一些有需要的同胞

+3

正確的答案應該是「你不要」,因爲在幫助器中使用模型會打破MVC。您的用戶列表應該在您的控制器中進行定義,然後僅由視圖使用。 – nIcO

+1

@nIcO我非常瞭解MVC,但有時我們需要向用戶顯示一些ID或相關數據,以便更好地理解......這是其中的一種情況。無論如何感謝您的幫助 –

0

您也可以在助手中加載模型,在助手類中添加以下方法:

Step1 :

public function loadModel($modelClass = null, $id = null) { 
    if ($modelClass === null) { 
     $modelClass = $this->modelClass; 
    } 

    $this->uses = ($this->uses) ? (array) $this->uses : array(); 
    if (!in_array($modelClass, $this->uses, true)) { 
     $this->uses[] = $modelClass; 
    } 

    list($plugin, $modelClass) = pluginSplit($modelClass, true); 

    $this->{$modelClass} = ClassRegistry::init(array(
       'class' => $plugin . $modelClass, 'alias' => $modelClass, 'id' => $id 
    )); 
    if (!$this->{$modelClass}) { 
     throw new MissingModelException($modelClass); 
    } 
    return true; 
} 

第二步:撥打以上方法你在控制器這樣做:

$this->loadModel(ModelName); 

我希望這將解決問題