У меня проблема с Yii + CDbCriteria / ActiveRecord в сочетании с консольными командами Yii
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 я получаю следующую ошибку и две верхние строки трассировки:
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 Framework. Является ли [class] :: mode () -> find ($ критериев), как я должен надувать объект с помощью 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;
}
}
При работе с функцией консоли yii учитывайте console.php
который является файлом конфигурации для консольных приложений так же, как main.php
хранит параметры и параметры для веб-приложений yii. Итак, когда вы создаете приложение в 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.*',
),
Надеюсь, что это решит вашу проблему, также имейте в виду, что, хотя это автозагрузка нескольких классов, вам могут не понадобиться все из них, используя имя определенных именных файлов вместо *
Подстановочный знак может быть лучшей практикой.
Хорошо, я понял, что в клиенте была модель, которую я пропустил. Это решено теперь спасибо за понимание люди дали