2014-12-02 74 views
0

我有問題的Yii + CDbCriteria/ActiveRecord的當Yii的控制檯命令Yii的ActiveRecord的和控制檯命令不工作

Yii的版本1.1.13

從控制器調用時下面的代碼工作相結合。因爲HTTP會話是可訪問的。

$criteria=new CDbCriteria; 
$criteria->select='first_name'; 
$criteria->condition='id=:contactid'; 
$criteria->params=array(':contactid'=>4); 
$contact=Contact::model()->find($criteria); // <-- exception occurs here... strange 
echo '<pre>'; 
var_dump($contact->first_name); 
echo '</pre>'; 

然而,通過Yii控制檯命令訪問時,我收到以下錯誤和頂部2 STRACK跡線:

exception 'CException' with message 'CConsoleApplication and its behaviors do not have a method or closure named "getSessiorks/yii/1.1.13/base/CComponent.php:265 
Stack trace: 
#0 /home/stm/stm_frameworks/yii/1.1.13/web/auth/CWebUser.php(193): CComponent->__call('getSession', Array) 
#1 /home/stm/stm_frameworks/yii/1.1.13/web/auth/CWebUser.php(193): CConsoleApplication->getSession() 

我可以理解,本次會議不提供給控制檯命令,但爲什麼它甚至訪問會話? Yii框架並不好。是[class] :: mode() - > find($ criteria)我應該如何使用ActiveRecord來擴充對象?似乎很相稱的例子,我在網上找到

任何幫助是極大的讚賞

這是命令類的例子

<?php 

class FlahCommand extends CConsoleCommand 
{ 
    var $id; 

    public function actionIndex() { 
     return 0; // not implemented 
    } 

    public function actionBlah($contactId=0) { 
     $criteria=new CDbCriteria; 
     $criteria->select='first_name'; 
     $criteria->condition='id=:contactid'; 
     $criteria->params=array(':contactid'=>$contactId); 
     $contact=Contact::model()->find($criteria); // <-- exception occurs here... strange 
     echo '<pre>'; 
     var_dump($contact->first_name); 
     echo '</pre>'; 

     return 0; 

    } 

} 
+0

你確定這是你的consoleCommand類中的所有代碼嗎? – 2014-12-02 23:34:16

+0

我沒有列出任何代碼,我只是列出了一個片斷,我知道它在$ contact = Contact :: model() - > find($ criteria)上崩潰;行 – wired00 2014-12-02 23:44:03

+0

@AliMasudianPour我已經用示例命令類修正了這個問題。 – wired00 2014-12-02 23:48:13

回答

0

好的我最終發現客戶端包含了一個我錯過的模型。現在它解決了感謝人們給予的洞察力

1

當與警予控制檯功能的工作,要知道的console.php這是控制檯應用程序的配置文件,就像main.php存儲yii web應用程序的參數和選項一樣。因此,當您在yii 1.1.13中創建應用程序時,默認情況下它不具有console.php中的導入參數,此參數負責處理yii自動加載的一部分,因此您將丟失類,我所做的是在我的console.php中添加以下內容作爲文件

'import'=>array(
      'application.models.*', 
      'application.components.*', 
      'application.behaviors.*', 
      'application.modules.content.*', 
      'application.modules.content.models.*', 
      'application.extensions.*', 
    ), 

希望內部數組的一個新元素這個解決您的問題,也知道,雖然這是自動加載幾個類,你可能並不需要所有的人,使用特定namesfiles的名稱,而不是*通配符可能是最佳做法。