2016-03-30 3 views
1

Я пытаюсь запустить ./yii из моей базовой директории. Несколько месяцев назад я использовал консольное приложение, и оно сработало. Я не уверен, что изменилось.Yii2 Консоль «Пользователь класса не существует»

я получаю следующее сообщение об ошибке:

Exception 'ReflectionException' with message 'Class user does not exist' 

in /var/www/html/beta/fs2/vendor/yiisoft/yii2/di/Container.php:415 

Stack trace: 
#0 /var/www/html/beta/fs2/vendor/yiisoft/yii2/di/Container.php(415): ReflectionClass->__construct('user') 
#1 /var/www/html/beta/fs2/vendor/yiisoft/yii2/di/Container.php(358): yii\di\Container->getDependencies('user') 
#2 /var/www/html/beta/fs2/vendor/yiisoft/yii2/di/Container.php(151): yii\di\Container->build('user', Array, Array) 
#3 /var/www/html/beta/fs2/vendor/yiisoft/yii2/di/Instance.php(154): yii\di\Container->get('user') 
#4 /var/www/html/beta/fs2/vendor/yiisoft/yii2/di/Instance.php(128): yii\di\Instance->get(NULL) 
#5 /var/www/html/beta/fs2/vendor/yiisoft/yii2/filters/AccessControl.php(98): yii\di\Instance::ensure('user', 'yii\web\User') 
#6 /var/www/html/beta/fs2/vendor/yiisoft/yii2/base/Object.php(107): yii\filters\AccessControl->init() 
#7 [internal function]: yii\base\Object->__construct(Array) 
#8 /var/www/html/beta/fs2/vendor/yiisoft/yii2/di/Container.php(372): ReflectionClass->newInstanceArgs(Array) 
#9 /var/www/html/beta/fs2/vendor/yiisoft/yii2/di/Container.php(151): yii\di\Container->build('yii\filters\Acc...', Array, Array) 
#10 /var/www/html/beta/fs2/vendor/yiisoft/yii2/BaseYii.php(344): yii\di\Container->get('yii\filters\Acc...', Array, Array) 
#11 /var/www/html/beta/fs2/vendor/yiisoft/yii2/base/Component.php(180): yii\BaseYii::createObject(Array) 
#12 /var/www/html/beta/fs2/vendor/yiisoft/yii2/BaseYii.php(518): yii\base\Component->__set('as beforeReques...', Array) 
#13 /var/www/html/beta/fs2/vendor/yiisoft/yii2/base/Object.php(105): yii\BaseYii::configure(Object(yii\console\Application), Array) 
#14 /var/www/html/beta/fs2/vendor/yiisoft/yii2/base/Application.php(206): yii\base\Object->__construct(Array) 
#15 /var/www/html/beta/fs2/vendor/yiisoft/yii2/console/Application.php(85): yii\base\Application->__construct(Array) 
#16 /var/www/html/beta/fs2/yii(30): yii\console\Application->__construct(Array) 
#17 {main} 

Как это исправить?



UPDATE

После добавления параметров в мой console\config\main.php файл, как предложено, теперь я получаю следующее сообщение об ошибке:

Exception 'yii\base\UnknownMethodException' with message 'Calling unknown method: yii\console\Request::getUserIP()' 

in /var/www/html/beta/fs2/vendor/yiisoft/yii2/base/Component.php:285 

Stack trace: 
#0 /var/www/html/beta/fs2/vendor/yiisoft/yii2/filters/AccessRule.php(105): yii\base\Component->__call('getUserIP', Array) 
#1 /var/www/html/beta/fs2/vendor/yiisoft/yii2/filters/AccessRule.php(105): yii\console\Request->getUserIP() 
#2 /var/www/html/beta/fs2/vendor/yiisoft/yii2/filters/AccessControl.php(118): yii\filters\AccessRule->allows(Object(yii\base\InlineAction), Object(yii\web\User), Object(yii\console\Request)) 
#3 /var/www/html/beta/fs2/vendor/yiisoft/yii2/base/ActionFilter.php(71): yii\filters\AccessControl->beforeAction(Object(yii\base\InlineAction)) 
#4 [internal function]: yii\base\ActionFilter->beforeFilter(Object(yii\base\ActionEvent)) 
#5 /var/www/html/beta/fs2/vendor/yiisoft/yii2/base/Component.php(541): call_user_func(Array, Object(yii\base\ActionEvent)) 
#6 /var/www/html/beta/fs2/vendor/yiisoft/yii2/base/Module.php(607): yii\base\Component->trigger('beforeAction', Object(yii\base\ActionEvent)) 
#7 /var/www/html/beta/fs2/vendor/yiisoft/yii2/base/Controller.php(139): yii\base\Module->beforeAction(Object(yii\base\InlineAction)) 
#8 /var/www/html/beta/fs2/vendor/yiisoft/yii2/console/Controller.php(91): yii\base\Controller->runAction('', Array) 
#9 /var/www/html/beta/fs2/vendor/yiisoft/yii2/base/Module.php(455): yii\console\Controller->runAction('', Array) 
#10 /var/www/html/beta/fs2/vendor/yiisoft/yii2/console/Application.php(167): yii\base\Module->runAction('', Array) 
#11 /var/www/html/beta/fs2/vendor/yiisoft/yii2/console/Application.php(143): yii\console\Application->runAction('', Array) 
#12 /var/www/html/beta/fs2/vendor/yiisoft/yii2/base/Application.php(375): yii\console\Application->handleRequest(Object(yii\console\Request)) 
#13 /var/www/html/beta/fs2/yii(31): yii\base\Application->run() 
#14 {main} 

Вот мой основной конфигурационный файл:

$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-console', 
    'basePath' => dirname(__DIR__), 
    'bootstrap' => ['log', 'gii'], 
    'controllerNamespace' => 'console\controllers', 
    'modules' => [ 
     'gii' => 'yii\gii\Module', 
    ], 
    'components' => [ 
     'log' => [ 
      'targets' => [ 
       [ 
        'class' => 'yii\log\FileTarget', 
        'levels' => ['error', 'warning'], 
       ], 
      ], 
     ], 
     'user' => [ 
      'class' => 'yii\web\User', 
      'identityClass' => 'common\models\UserConsole', 
      //'enableAutoLogin' => true, 
     ], 
    ], 
    'params' => $params, 
]; 

В каталоге console\controllers пусто.

+0

Показать содержимое строки ошибки –

+0

Если вы не уверены, что изменилось с тех пор, было бы неплохо добавить проект в исходный контроль, например Git или Mercurial :) – jacmoe

+1

@jacmoe Спасибо, но я работаю над остров в Тихом океане с ужасным интернетом, поэтому я стараюсь избегать услуг, требующих подключения. – zDaniels

ответ

2

Консольное приложение не содержит user. Таким образом, вам необходимо настроить компонент user в /console/config/main.php.

вроде как,

/console/config/main.php

'components' => [ 
......... 
...... 
     'user' => [ 
      'class' => 'yii\web\User', 
      'identityClass' => 'app\models\User', 
      //'enableAutoLogin' => true, 
     ], 
....... 
] 
+0

Спасибо. Теперь я получаю сообщение об ошибке «Исключение» yii \ base \ UnknownMethodException с сообщением «Вызов неизвестного метода: yii \ console \ Request :: getUserIP()». – zDaniels

+0

см. Ссылку https://github.com/yiisoft/yii2-debug/issues/5 – GAMITG

1

Причина довольно проста, потому что пользователь является компонентом. Guide говорит о компонентах приложения. Так что в консольном приложении 'user' не существует. Итак, вам нужно настроить компонент пользователя в config/main.php. Затем попробуйте этот код ниже:

'components'=>array(
    'user'=>array(
     'class' => 'WebUser', 
    ), 
    'session' => [ // for use session in console application 
     'class' => 'yii\web\Session' 
    ], 

или

'components'=>array(
    'user'=>array(
     'class' => 'yii\web\User', 
     'identityClass' => 'app\models\User', 
    ), 
    'session' => [ // for use session in console application 
     'class' => 'yii\web\Session' 
    ], 

пользователя: представляет информацию аутентификации пользователя. Этот компонент доступен только в веб-приложениях. Дополнительную информацию см. В разделе «Аутентификация».

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