Не знал как назвать лучше тему В общем, проблема с контейнером внедрения зависимостей.
Есть общий контроль доступа в конфигурации бекенда main.php:
Код: Выделить всё
'as access' => [
'class' => 'yii\filters\AccessControl',
'except' => ['auth/login'],
'denyCallback' => function ($params, $action) {
exit(Yii::t('yii', 'You are not allowed to perform this action.'));
}, 'rules' => [
[
'allow' => true,
'roles' => ['backendAccess'],
],
],
],
Код: Выделить всё
class User extends \yii\web\User
{
private $dispatcher;
public function __construct(\core\dispatchers\EventDispatcher $dispatcher, $config = []) {
$this->dispatcher = $dispatcher;
parent::__construct($config);
}
protected function afterLogin($identity, $cookieBased, $duration) {
parent::afterLogin($identity, $cookieBased, $duration);
}
}
Хотя в bootstrap добавленоyii\di\NotInstantiableException: Can not instantiate core\dispatchers\EventDispatcher. in ...vendor\yiisoft\yii2\di\Container.php:373
Stack trace:
#0 ..\\vendor\yiisoft\yii2\di\Container.php(156): yii\di\Container->build('core\\dispatcher...', Array, Array)
#1 ..\\vendor\yiisoft\yii2\di\Container.php(468): yii\di\Container->get('core\\dispatcher...')
#2 ..\\vendor\yiisoft\yii2\di\Container.php(371): yii\di\Container->resolveDependencies(Array, Object(ReflectionClass))
#3 ..\\vendor\yiisoft\yii2\di\Container.php(156): yii\di\Container->build('common\\componen...', Array, Array)
#4 ..\\vendor\yiisoft\yii2\BaseYii.php(349): yii\di\Container->get('common\\componen...', Array, Array)
#5 ..\\vendor\yiisoft\yii2\di\ServiceLocator.php(137): yii\BaseYii::createObject(Array)
#6 ..\\vendor\yiisoft\yii2\base\Module.php(742): yii\di\ServiceLocator->get('user', true)
#7 ..\\vendor\yiisoft\yii2\di\Instance.php(164): yii\base\Module->get('user')
#8 ..\\vendor\yiisoft\yii2\di\Instance.php(137): yii\di\Instance->get(NULL)
#9 ..\\vendor\yiisoft\yii2\filters\AccessControl.php(102): yii\di\Instance::ensure(Object(yii\di\Instance), 'yii\\web\\User')
#10 ..\\vendor\yiisoft\yii2\base\BaseObject.php(109): yii\filters\AccessControl->init()
#11 [internal function]: yii\base\BaseObject->__construct(Array)
#12 ..\\vendor\yiisoft\yii2\di\Container.php(384): ReflectionClass->newInstanceArgs(Array)
#13 ..\\vendor\yiisoft\yii2\di\Container.php(156): yii\di\Container->build('yii\\filters\\Acc...', Array, Array)
#14 ..\\vendor\yiisoft\yii2\BaseYii.php(349): yii\di\Container->get('yii\\filters\\Acc...', Array, Array)
#15 ..\\vendor\yiisoft\yii2\base\Component.php(191): yii\BaseYii::createObject(Array)
#16 ..\\vendor\yiisoft\yii2\BaseYii.php(546): yii\base\Component->__set('access', Array)
#17 ..\\vendor\yiisoft\yii2\base\BaseObject.php(107): yii\BaseYii::configure(Object(yii\web\Application), Array)
#18 ..\\vendor\yiisoft\yii2\base\Application.php(206): yii\base\BaseObject->__construct(Array)
#19 ..\\backend\web\index.php(20): yii\base\Application->__construct(Array)
#20 {main}
Код: Выделить всё
$container->setSingleton(EventDispatcher::class, function (Container $container) {
return new MyEventDispatcher();
});
Я так понимаю, что до Bootstrap дело даже не доходит. Все крашится на этапе старта приложения и надо сконфигурировать container в конфигурации.