1

I'm trying to run ./yii from my base directory. I used the console application a few months ago and it worked then. I'm not sure what changed.

I get the following error:

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}

How do I fix this?



UPDATE

After adding the parameters to my console\config\main.php file as suggested, I am now getting the following error:

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}

Here is my main config file:

$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,
];

The directory console\controllers is empty.

4
  • Show error row content Commented Mar 30, 2016 at 23:41
  • If you are not sure what has changed since then, it would probably be a good idea to add your project to source control, like Git or Mercurial :) Commented Mar 31, 2016 at 4:41
  • 1
    @jacmoe Thanks, but I work on an island in the Pacific with terrible internet so I tend to avoid services that require a connection. Commented Apr 2, 2016 at 1:24
  • @readtheBook Mercurial and Git are distributed version control - that means that you can use them without a connection :) ((They are serverless, in other words)) Commented Apr 2, 2016 at 11:13

2 Answers 2

2

Console application does not have user component. So, you need to configure user component in /console/config/main.php.

like as,

/console/config/main.php

 'components' => [
 .........
 ......
        'user' => [
            'class' => 'yii\web\User',
            'identityClass' => 'app\models\User',
            //'enableAutoLogin' => true,
        ],
 .......
]
Sign up to request clarification or add additional context in comments.

1 Comment

Thanks. I'm now getting the error Exception 'yii\base\UnknownMethodException' with message 'Calling unknown method: yii\console\Request::getUserIP()'.
1

The reason is quite simple because user is a component. Guide says about application components. So in Console application 'user' does not exist. So, you need to configure user component in config/main.php. Then Try this code below:

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

or

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

user: represents the user authentication information. This component is only available in Web applications Please refer to the Authentication section for more details.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.