Yii2- получение ошибок при вызове веб-контроллера из контроллера консолиPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Yii2- получение ошибок при вызове веб-контроллера из контроллера консоли

Сообщение Anonymous »

Я работаю над yii2. У меня есть действие create в моем контроллере с именем MeteringController.

Код: Выделить всё

class MeterpingController extends Controller
{
public function beforeAction($action)
{

if ($action->id == 'create') {
$this->enableCsrfValidation = false;
}

return parent::beforeAction($action);

}

public function actionCreate()
{
foreach ($record as $item){

// var_dump($item->MSN);
$date_time = str_replace('T', ' ', $item->PingDateTime);
if($this->isSaved($item->MSN))
{
// return true;
}
else if($this->isVerified($item->MSN))
{
// return true;
}
else if($this->ogpCreated($item->MSN,$date_time))
{
$m = new MeterPing;
$m ->load(Yii::$app->request->post());
$m->start_date_time = str_replace('T', ' ', $start_time);
$m->end_date_time = str_replace('T', ' ', $end_time);

$m->meter_msn = $item->MSN;
$m->meter_id = Meters::msnmapToid($m->meter_msn);
$m->meter_type = Meters::mType($m->meter_msn);
$m->sub_div_code = Ogpdetail::msnTosubdiv($item->MSN);
$m->sub_div_name = Ogpdetail::subDivToName($m->sub_div_code);
$m->meter_ping_date_time = str_replace('T', ' ', $item->PingDateTime);
$m->save();
}

}
return $this->redirect(['index']);
}
}
Ниже приведены две функции

Код: Выделить всё

 public static function isVerified($msn)
{
$meter = Installations::find()->where(['meter_msn'=>$msn])->one();

if($meter)
return true;
return false;
}

public static function ogpCreated($msn,$date_time){
$meter = Ogpdetail::find()->where(['meter_serial' =>  $msn])->one();

if($meter)
{
if($date_time>$meter['created_at'])
return true;
return false;
}
else{
return false;
}

}
У меня есть контроллер консоли, в котором я пытаюсь вызвать указанное выше действие

Код: Выделить всё

namespace console\controllers;

use yii\console\Controller;
use Yii;

class CronController extends Controller {

public function actionIndex() {
Yii::$app->controllerNamespace = "backend\controllers";

Yii::$app->runAction('meterping/create');
}
}
В cmd я использую следующую команду

Код: Выделить всё

E:\xampp\htdocs\inventory-web>php yii cron
Я получаю сообщение об ошибке

Код: Выделить всё

Stack trace:
#0 E:\xampp\htdocs\inventory-
web\backend\controllers\MeterpingController.php(126):
backend\controllers\MeterpingController::isVerified('002999001152')
#1 [internal function]: backend\controllers\MeterpingController-
>actionCreate()
#2 E:\xampp\htdocs\inventory-
web\vendor\yiisoft\yii2\base\InlineAction.php(57):
call_user_func_array(Array, Array)
#3 E:\xampp\htdocs\inventory-
web\vendor\yiisoft\yii2\base\Controller.php(156): yii\base\InlineAction-
>runWithParams(Array)
#4 E:\xampp\htdocs\inventory-web\vendor\yiisoft\yii2\base\Module.php(523):
yii\base\Controller->runAction('create', Array)
#5 E:\xampp\htdocs\inventory-
web\vendor\yiisoft\yii2\console\Application.php(180): yii\base\Module-
>runAction('meterping/creat...', Array)
#6 E:\xampp\htdocs\inventory-web\console\controllers\CronController.php(24):
yii\console\Application->runAction('meterping/creat...')
#7 [internal function]: console\controllers\CronController->actionIndex()
#8 E:\xampp\htdocs\inventory-
web\vendor\yiisoft\yii2\base\InlineAction.php(57):
call_user_func_array(Array, Array)
#9 E:\xampp\htdocs\inventory-
web\vendor\yiisoft\yii2\base\Controller.php(156): yii\base\InlineAction-
>runWithParams(Array)
#10 E:\xampp\htdocs\inventory-
web\vendor\yiisoft\yii2\console\Controller.php(128): yii\base\Controller-
>runAction('', Array)
#11 E:\xampp\htdocs\inventory-web\vendor\yiisoft\yii2\base\Module.php(523):
yii\console\Controller->runAction('', Array)
#12 E:\xampp\htdocs\inventory-
web\vendor\yiisoft\yii2\console\Application.php(180): yii\base\Module-
>runAction('cron', Array)
#13 E:\xampp\htdocs\inventory-
web\vendor\yiisoft\yii2\console\Application.php(147):
yii\console\Application->runAction('cron', Array)
#14 E:\xampp\htdocs\inventory-
web\vendor\yiisoft\yii2\base\Application.php(380): yii\console\Application-
>handleRequest(Object(yii\console\Request))
#15 E:\xampp\htdocs\inventory-web\yii(27): yii\base\Application->run()
#16 {main}
Раньше я вызывал echo непосредственно из actionIndex() и, используя ту же команду, я мог видеть правильный результат. Но вызов действия из другого контроллера, похоже, не работает.

Примечание. Я хочу вызывать его по расписанию, поэтому я создал задание cron.

Как я могу настроить свой код так, чтобы эта ошибка не отображалась в cmd?

Обновление 1

В соответствии с предложением, которое было дано по этой ссылке

Я сделал следующее:
  • Создал папку компонентов в разделе «Общие» Папка .
  • Создан собственный компонент в папке компонентов

    Код: Выделить всё

     namespace common\components;
    
    use Yii;
    use yii\base\Component;
    use yii\base\InvalidConfigException;
    use app\models\Installations;
    use app\models\Meters;
    use common\models\MeterPing;
    use common\models\MeterpingSearch;
    use common\models\Ogpdetail;
    use yii\web\Controller;
    use yii\web\NotFoundHttpException;
    use yii\filters\VerbFilter;
    use PhpOffice\PhpSpreadsheet\Spreadsheet;
    use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
    use PhpOffice\PhpSpreadsheet\Reader\Xls\Style;
    public function create() {
    
    //...My code
    
    }
    
  • Компонент зарегистрирован в common/config/main-local.php

    Код: Выделить всё

     'components' => [
    
    'pingManager' => [
    
    'class' => 'common\components\MyComponent',
    
    ],
    ]
    
  • В моем веб-контроллере я сделал следующее:

    Код: Выделить всё

    Yii::$app->pingManager->create();
    return $this->redirect(['index']);
    
Теперь, когда я пытаюсь получить к нему доступ через Интернет, появляется следующая ошибка

Код: Выделить всё

Unable to find 'common\components\MyComponent' in file: E:\xampp\htdocs\inventory-web\common/components/MyComponent.php. Namespace missing?
Обновление 2

Мне не хватало имени класса, поэтому я обновил его до MyComponent и получить к нему доступ через Интернет. Это сработало. Теперь, когда я пытаюсь запустить его через консоль, я получаю ошибку ниже.

Код: Выделить всё

Exception 'Error' with message 'Class 'app\models\Installations' not found'

in E:\xampp\htdocs\inventory-web\common\components\MyComponent.php:89

Stack trace:
#0 E:\xampp\htdocs\inventory-web\common\components\MyComponent.php(65):
common\components\MyComponent::isVerified('002999001064')
#1 E:\xampp\htdocs\inventory-
web\backend\controllers\MeterpingController.php(148):
common\components\MyComponent->create()
#2 [internal function]: backend\controllers\MeterpingController-
>actionCreate()
#3 E:\xampp\htdocs\inventory-
web\vendor\yiisoft\yii2\base\InlineAction.php(57):
call_user_func_array(Array, Array)
#4 E:\xampp\htdocs\inventory-
web\vendor\yiisoft\yii2\base\Controller.php(156): yii\base\InlineAction-
>runWithParams(Array)
#5 E:\xampp\htdocs\inventory-web\vendor\yiisoft\yii2\base\Module.php(523):
yii\base\Controller->runAction('create', Array)
#6 E:\xampp\htdocs\inventory-
web\vendor\yiisoft\yii2\console\Application.php(180): yii\base\Module-
>runAction('meterping/creat...', Array)
#7 E:\xampp\htdocs\inventory-web\console\controllers\CronController.php(24):
yii\console\Application->runAction('meterping/creat...')
#8 [internal function]: console\controllers\CronController->actionIndex()
#9 E:\xampp\htdocs\inventory-
web\vendor\yiisoft\yii2\base\InlineAction.php(57):
call_user_func_array(Array, Array)
#10 E:\xampp\htdocs\inventory-
web\vendor\yiisoft\yii2\base\Controller.php(156): yii\base\InlineAction-
>runWithParams(Array)
#11 E:\xampp\htdocs\inventory-
web\vendor\yiisoft\yii2\console\Controller.php(128): yii\base\Controller-
>runAction('', Array)
#12 E:\xampp\htdocs\inventory-web\vendor\yiisoft\yii2\base\Module.php(523):
yii\console\Controller->runAction('', Array)
#13 E:\xampp\htdocs\inventory-
web\vendor\yiisoft\yii2\console\Application.php(180): yii\base\Module-
>runAction('cron', Array)
#14 E:\xampp\htdocs\inventory-
web\vendor\yiisoft\yii2\console\Application.php(147):
yii\console\Application->runAction('cron', Array)
#15 E:\xampp\htdocs\inventory-
web\vendor\yiisoft\yii2\base\Application.php(380): yii\console\Application-
>handleRequest(Object(yii\console\Request))
#16 E:\xampp\htdocs\inventory-web\yii(27): yii\base\Application->run()
#17 {main}
Число 89 — это $meter = Installations::find()->where(['meter_msn'=>$msn])->one( );

Будем очень признательны за любую помощь.

Подробнее здесь: https://stackoverflow.com/questions/506 ... controller
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Окружение Yii2 с расписанием Yii2 не может прочитать значение окружения для контроллера консоли
    Anonymous » » в форуме Php
    0 Ответы
    35 Просмотры
    Последнее сообщение Anonymous
  • Сопоставление yii2-select2 в виджете yii2 kartik
    Гость » » в форуме Php
    0 Ответы
    84 Просмотры
    Последнее сообщение Гость
  • Справка консоли Yii2 дает двойную запись для моего модуля
    Anonymous » » в форуме Php
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Получение ошибок при создании контроллера в MVC
    Anonymous » » в форуме C#
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Получение ошибок при создании контроллера в MVC
    Anonymous » » в форуме C#
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Php»