2015-01-29 2 views
0

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

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(); 

Это то, что интерфейс/конфигурации/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

Похоже на проблему с конфигурацией приложения. Не могли бы вы опубликовать его? – arogachev

+0

Это все, что есть в frontend/config/main.php: – LarryTX

ответ

0

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

+0

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

Смежные вопросы