Использование трассировки стека Yii2 для устранения неполадок

0

У меня много проблем, когда выясняется, как использовать трассировку стека Yii2 для диагностики проблем. В частности, я редко могу найти источник проблемы (в моем коде) в зависимости от того, что говорит мне трассировка. Я уверен, что только я был тупым, поэтому я надеюсь, что кто-то может мне помочь в этом. В качестве примера я неожиданно столкнулся с "PHP Warning - yii\base\ErrorException call_user_func() ожидает, что параметр 1 будет действительным обратным вызовом, ошибка" ошибка "не найдена", и я получаю след, найденный ниже. Я не могу найти что-либо в списке трассировки, которое указывает мне на то, что я, возможно, сделал неправильно в своем кодировании. Все, кажется, указывает на основное кодирование, а не на мое. Может ли кто-нибудь помочь мне здесь?

 PHP Warning – yii\base\ErrorException

call_user_func() ожидает, что параметр 1 будет действительным обратным вызовом, класс "ошибка" не найден

1. in L:\xampp\htdocs\public_html\vendor\yiisoft\yii2\BaseYii.php at line 346
337338339340341342343344345346347348349350351352353354355

    public static function createObject($type, array $params = [])
    {
        if (is_string($type)) {
            return static::$container->get($type, $params);
        } elseif (is_array($type) && isset($type['class'])) {
            $class = $type['class'];
            unset($type['class']);
            return static::$container->get($class, $params, $type);
        } elseif (is_callable($type, true)) {
            return call_user_func($type, $params);
        } elseif (is_array($type)) {
            throw new InvalidConfigException('Object configuration must be an array containing a "class" element.');
        } else {
            throw new InvalidConfigException("Unsupported configuration type: " . gettype($type));
        }
    }

    private static $_logger;


2. yii\base\ErrorHandler::handleError(2, 'call_user_func() expects paramet...', 'L:\xampp\htdocs\public_html\vend...', 346, ...)
3. in L:\xampp\htdocs\public_html\vendor\yiisoft\yii2\BaseYii.php – call_user_func(['error', 'warning'], []) at line 346
4. in L:\xampp\htdocs\public_html\vendor\yiisoft\yii2\log\Dispatcher.php – yii\BaseYii::createObject(['error', 'warning']) at line 101
5. in L:\xampp\htdocs\public_html\vendor\yiisoft\yii2\base\Object.php – yii\log\Dispatcher::init() at line 107
6. in L:\xampp\htdocs\public_html\vendor\yiisoft\yii2\log\Dispatcher.php – yii\base\Object::__construct(['traceLevel' => 3, 'targets' => ['class' => 'yii\log\FileTarget', 'levels' => ['error', 'warning']]]) at line 89
7. yii\log\Dispatcher::__construct(['traceLevel' => 3, 'targets' => ['class' => 'yii\log\FileTarget', 'levels' => ['error', 'warning']]])
8. in L:\xampp\htdocs\public_html\vendor\yiisoft\yii2\di\Container.php – ReflectionClass::newInstanceArgs([['traceLevel' => 3, 'targets' => ['class' => 'yii\log\FileTarget', 'levels' => ['error', 'warning']]]]) at line 368
9. in L:\xampp\htdocs\public_html\vendor\yiisoft\yii2\di\Container.php – yii\di\Container::build('yii\log\Dispatcher', [], ['traceLevel' => 3, 'targets' => ['class' => 'yii\log\FileTarget', 'levels' => ['error', 'warning']]]) at line 147
10. in L:\xampp\htdocs\public_html\vendor\yiisoft\yii2\BaseYii.php – yii\di\Container::get('yii\log\Dispatcher', [], ['traceLevel' => 3, 'targets' => ['class' => 'yii\log\FileTarget', 'levels' => ['error', 'warning']]]) at line 344
11. in L:\xampp\htdocs\public_html\vendor\yiisoft\yii2\di\ServiceLocator.php – yii\BaseYii::createObject(['traceLevel' => 3, 'targets' => ['class' => 'yii\log\FileTarget', 'levels' => ['error', 'warning']], 'class' => 'yii\log\Dispatcher']) at line 133
12. in L:\xampp\htdocs\public_html\vendor\yiisoft\yii2\base\Application.php – yii\di\ServiceLocator::get('log') at line 302
13. in L:\xampp\htdocs\public_html\vendor\yiisoft\yii2\web\Application.php – yii\base\Application::bootstrap() at line 63
14. in L:\xampp\htdocs\public_html\vendor\yiisoft\yii2\base\Application.php – yii\web\Application::bootstrap() at line 267
15. in L:\xampp\htdocs\public_html\vendor\yiisoft\yii2\base\Object.php – yii\base\Application::init() at line 107
16. in L:\xampp\htdocs\public_html\vendor\yiisoft\yii2\base\Application.php – yii\base\Object::__construct(['components' => ['cache' => ['class' => 'yii\caching\FileCache'], 'urlManager' => ['enablePrettyUrl' => true, 'showScriptName' => 'false', 'class' => 'yii\web\UrlManager', 'rules' => ['<controller:\w+>/<id:\d+>' => '<controller>/view', '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>', '<controller:\w+>/<action:\w+>' => '<controller>/<action>']], 'db' => ['class' => 'yii\db\Connection', 'dsn' => 'mysql:host=localhost;dbname=larr...', 'username' => 'xxxx', 'password' => 'xxxx', ...], 'mailer' => ['class' => 'yii\swiftmailer\Mailer', 'viewPath' => '@common/mail', 'useFileTransport' => true], ...], 'modules' => ['social' => ['class' => 'kartik\social\Module', 'disqus' => ['settings' => ['shortname' => 'DISQUS_SHORTNAME']], 'facebook' => ['appId' => 'xxxxx', 'secret' => 'xxxxx']], 'gridview' => ['class' => '\kartik\grid\Module'], 'debug' => 'yii\debug\Module', 'gii' => 'yii\gii\Module'], 'id' => 'app-frontend', 'name' => 'MemeHope', ...]) at line 206
17. in L:\xampp\htdocs\public_html\frontend\web\index.php – yii\base\Application::__construct(['vendorPath' => 'L:\xampp\htdocs\public_html/vend...', 'components' => ['cache' => ['class' => 'yii\caching\FileCache'], 'urlManager' => ['enablePrettyUrl' => true, 'showScriptName' => 'false', 'class' => 'yii\web\UrlManager', 'rules' => ['<controller:\w+>/<id:\d+>' => '<controller>/view', '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>', '<controller:\w+>/<action:\w+>' => '<controller>/<action>']], 'db' => ['class' => 'yii\db\Connection', 'dsn' => 'mysql:host=localhost;dbname=larr...', 'username' => 'xxxxx', 'password' => 'xxxxx', ...], 'mailer' => ['class' => 'yii\swiftmailer\Mailer', 'viewPath' => '@common/mail', 'useFileTransport' => true], ...], 'modules' => ['social' => ['class' => 'kartik\social\Module', 'disqus' => ['settings' => ['shortname' => 'DISQUS_SHORTNAME']], 'facebook' => ['appId' => 'xxxxxx', 'secret' => 'xxxx']], 'gridview' => ['class' => '\kartik\grid\Module'], 'debug' => 'yii\debug\Module', 'gii' => 'yii\gii\Module'], 'id' => 'app-frontend', ...]) at line 17
1112131415161718

    require(__DIR__ . '/../../common/config/main.php'),
    require(__DIR__ . '/../../common/config/main-local.php'),
    require(__DIR__ . '/../config/main.php'),
    require(__DIR__ . '/../config/main-local.php')
);

$application = new yii\web\Application($config);
$application->run();

Вот что выглядит интерфейс /config/main.php:

<?php

$params = array_merge(
    require(__DIR__ . '/../../common/config/params.php'),
    require(__DIR__ . '/../../common/config/params-local.php'),
    require(__DIR__ . '/params.php'), require(__DIR__ . '/params-local.php')
);

return [
    'id'                  => 'app-frontend',
    'basePath'            => dirname(__DIR__),
    'name'                => 'MemeHope',
    'bootstrap'           => ['log'],
    'controllerNamespace' => 'frontend\controllers',
    'components'          => [

        'urlManager'   => [
            'class'           => 'yii\web\UrlManager',
            'enablePrettyUrl' => true,
            'showScriptName'  => 'false',
            'rules'           => [
                '<controller:\w+>/<id:\d+>'              => '<controller>/view',
                '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
                '<controller:\w+>/<action:\w+>'          => '<controller>/<action>',
            ],
        ],
        'log'          => [
            'traceLevel' => YII_DEBUG ? 3 : 0,
            'targets'    => [
                'class'  => 'yii\log\FileTarget',
                'levels' => ['error', 'warning'],
            ],
        ],
        'errorHandler' => [
            'errorAction' => 'site/error',
        ],
        'user'         => [
            'identityClass'   => 'common\models\User',
            'enableAutoLogin' => true,
        ],
    ],
    'modules'             => [
        'gridview' => [
            'class' => '\kartik\grid\Module'
            // enter optional module parameters below - only if you need to
            // use your own export download action or custom translation
            // message source
            // 'downloadAction' => 'gridview/export/download',
            // 'i18n' => []
        ],
    ],
    'params'              => $params,
];

Все остальное в общем /config/main.php, и бэкэнд сайта работает отлично, поэтому я сомневаюсь, что проблема там.

  • 0
    Похоже, проблема с вашим приложением конфигурации. Не могли бы вы опубликовать это?
  • 0
    Это все, что есть в frontend / config / main.php:
Теги:
yii2
yii2-advanced-app
stack-trace

1 ответ

0

Попробуйте обновить свой проект, выполнив composer update или composer update php composer.phar update. Иногда файлы перепутаны при работе на localhost. Это случалось со мной много раз. Но обновление пакетов решило мою проблему. Смотрите, если это сработает и для вас.

  • 0
    Ну, запуск composer update не помог, хотя это помогло несколько раз в прошлом. Я только что попытался config/main.php , и это config/main.php . Оба эти предложения были отличными, но на самом деле они не отвечают на мой первоначальный вопрос. Многое было сделано с использованием трассировки стека для диагностики проблем в Yii2, но я почти никогда не находил это полезным. Я что-то упустил, или это действительно просто бесполезная болтовня ? Похоже, что разработчики Yii могли бы дать нам больше полезной информации, когда отказывает фреймворк.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню