【发布时间】:2015-01-31 08:57:26
【问题描述】:
Yii + CDbCriteria / ActiveRecord 与 Yii 控制台命令结合使用时出现问题
Yii 1.1.13 版
以下代码在从控制器调用时有效。因为 HTTP Session 是可访问的。
$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 条跟踪行:
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;
}
}
【问题讨论】:
-
你确定这就是你进入你的 consoleCommand 类的所有代码吗?
-
我没有列出任何代码,我只是列出了一个我知道它在 $contact=Contact::model()->find($criteria); 上崩溃的 sn-p行
-
@AliMasudianPour 我已经用示例命令类修改了这个问题。
-
这很奇怪。您是否在
console.php配置文件中设置了任何CWebUser配置?或者您的Contact模型是否有任何附加的behavior与CWebUser交互? -
我会检查一下,正如我所提到的,虽然我不精通 Yii,但我对 zend、code igniter 和 Laravel 有更多的经验。但我会看看我能找到什么
标签: php activerecord yii console command