rock-lee
补充一个我碰到的问题,给可能需要人参考:
使用
basic
模板创建app时,必须要在config/console.php
中设置authManager
使用rbac:'components' => [ 'db' => $db, 'authManager' => [ 'class' => 'yii\rbac\DbManager', ], ],
否则,执行
yii migrate
的时候会报InvalidConfigException
异常:[jason@kali:/var/www/learn/basic]$ ./yii migrate --migrationPath=@yii/rbac/migrations Yii Migration Tool (based on Yii v2.0.6) Total 1 new migration to be applied: m140506_102106_rbac_init Apply the above migration? (yes|no) [no]:yes *** applying m140506_102106_rbac_init NULL Exception 'yii\base\InvalidConfigException' with message 'You should configure "authManager" component to use database before executing this migration.' in /var/www/learn/basic/vendor/yiisoft/yii2/rbac/migrations/m140506_102106_rbac_init.php:29 Stack trace: #0 /var/www/learn/basic/vendor/yiisoft/yii2/rbac/migrations/m140506_102106_rbac_init.php(36): m140506_102106_rbac_init->getAuthManager() #1 /var/www/learn/basic/vendor/yiisoft/yii2/console/controllers/BaseMigrateController.php(492): m140506_102106_rbac_init->up() #2 /var/www/learn/basic/vendor/yiisoft/yii2/console/controllers/BaseMigrateController.php(129): yii\console\controllers\BaseMigrateController->migrateUp('m140506_102106_...') #3 [internal function]: yii\console\controllers\BaseMigrateController->actionUp(0) #4 /var/www/learn/basic/vendor/yiisoft/yii2/base/InlineAction.php(55): call_user_func_array(Array, Array) #5 /var/www/learn/basic/vendor/yiisoft/yii2/base/Controller.php(151): yii\base\InlineAction->runWithParams(Array) #6 /var/www/learn/basic/vendor/yiisoft/yii2/console/Controller.php(91): yii\base\Controller->runAction('', Array) #7 /var/www/learn/basic/vendor/yiisoft/yii2/base/Module.php(455): yii\console\Controller->runAction('', Array) #8 /var/www/learn/basic/vendor/yiisoft/yii2/console/Application.php(167): yii\base\Module->runAction('migrate', Array) #9 /var/www/learn/basic/vendor/yiisoft/yii2/console/Application.php(143): yii\console\Application->runAction('migrate', Array) #10 /var/www/learn/basic/vendor/yiisoft/yii2/base/Application.php(375): yii\console\Application->handleRequest(Object(yii\console\Request)) #11 /var/www/learn/basic/yii(19): yii\base\Application->run() #12 {main}
注意:上面
*** applying m140506_102106_rbac_init
下面这行打印出来的NULL,是因为我调试过程中修改了代码,在第28行添加了输出:[jason@kali:/var/www/learn/basic]$ grep -n var_dump -C3 /var/www/learn/basic/vendor/yiisoft/yii2/rbac/migrations/m140506_102106_rbac_init.php 25- { 26- $authManager = Yii::$app->getAuthManager(); 27- if (!$authManager instanceof DbManager) { 28: var_dump($authManager); 29- throw new InvalidConfigException('You should configure "authManager" component to use database before executing this migration.'); 30- } 31- return $authManager;
Problem was quite simple: The configuration was not used. yii migrate is a console command and usually the configuration for such commands is placed in a seperated file. In case of yii2-app-base template, from which I have created my application, there is a config/console.php configuration file where the authManager needs to be declared. It is not sufficient to have it in the config/web.php declared only. In case of yii2-app-advanced the authManager should be declared in console/config/main.php and not in the backend or frontend configuration files.