2014-12-02 61 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的名称,而不是*通配符可能是最佳做法。