与Yii控制台命令结合使用时,我遇到Yii + CDbCriteria / 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() - &gt; 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 :(得分:1)
使用yii控制台功能时,请注意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.*',
),
希望这可以解决您的问题,同时也要注意虽然这可能是自动加载几个类,但您可能不需要所有类,但使用特定名称文件的名称而不是*
通配符可能是最佳做法。
答案 1 :(得分:0)
好的,我最终弄清楚客户端是否包含了一个我错过的模型。它现在解决了感谢人们给予的洞察力