一、前言
最近碰到一個yii2.0
的報錯,網上查的時候也沒什麼太好的資料參考,所以就記錄一下。完整的報錯是:
Exception 'yii\base\InvalidConfigException' with message 'Failed to instantiate component or class "Array"
二、錯誤堆棧
既然查不到類似的錯誤,那就只能從錯誤堆棧上找問題了,這裏博主自己心態也有問題,習慣於百度谷歌搜索問題,反而忘記了分析原始的堆棧錯誤,實在不應該。
Stack trace:
#0 xx\vendor\yiisoft\yii2\di\Container.php(374): yii\di\
Container->getDependencies(Array) //數組
#1 xx\vendor\yiisoft\yii2\di\Container.php(159): yii\di\
Container->build(Array, Array, Array) //數組
#2 xx\vendor\yiisoft\yii2\BaseYii.php(365): yii\di\Conta
iner->get(Array, Array, Array) //數組
#3 xx\vendor\yiisoft\yii2\di\ServiceLocator.php(137): yi
i\BaseYii::createObject(Array) //數組
#4 xx\vendor\yiisoft\yii2\base\Module.php(742): yii\di\S
erviceLocator->get('session', true) //從這步讀取session開始,之後的處理就是數組了,那應該是session問題
#5 xx\vendor\yiisoft\yii2\di\ServiceLocator.php(74): yii
\base\Module->get('session')
#6 xx\console\controllers\AutoController.php(217): yii\d
i\ServiceLocator->__get('session')
#7 xx\vendor\yiisoft\yii2\base\Controller.php(155): cons
ole\controllers\AutoController->beforeAction(Object(yii\base\InlineAction))
#8 xx\vendor\yiisoft\yii2\console\Controller.php(164): y
ii\base\Controller->runAction('parse-cost', Array)
#9 xx\vendor\yiisoft\yii2\base\Module.php(528): yii\cons
ole\Controller->runAction('parse-cost', Array)
#10 xx\vendor\yiisoft\yii2\console\Application.php(180):
yii\base\Module->runAction('auto/parse-cost', Array)
#11 xx\vendor\yiisoft\yii2\console\Application.php(147):
yii\console\Application->runAction('auto/parse-cost', Array)
#12 xx\vendor\yiisoft\yii2\base\Application.php(386): yi
i\console\Application->handleRequest(Object(yii\console\Request))
#13 xx\yii(39): yii\base\Application->run()
#14 {main}
三、錯誤原因
根據堆棧信息,是讀取session
配置的時候出現的錯誤,因此更應該從配置上下手。從新看一下當前項目的配置信息,發現定義了兩次session
,也就是說,session
的定義是不能重複的,重複的話就會認爲是數組,容器讀取配置就會出錯,刪除一個即可
return array_merge_recursive(
require(dirname(__FILE__) . "/../../common/config/main.php"), //這裏面也有個session的定義
array(
'id' => 'app-console',
'basePath' => dirname(__DIR__),
'bootstrap' => ['log'],
'controllerNamespace' => 'console\controllers',
'components' => [
'session' => [
'class' => 'yii\web\CacheSession', // -- 用cache存儲session, cache參考main-local的cache設置
'cache' => 'cache', // -- 定義cache類
],
]
)
);
end