Задать вопрос
@matperez

Почему автолоадер Yii2 не видит класс при обращении к его константе?

Обычное приложение Yii2 Basic. Прям свежий клон.

git clone git@github.com:yiisoft/yii2-app-basic.git
cd yii2-app-basic
composer install
./yii


Единственное изменение: создать дополнительный компонент и прописать его в контейнер зависимостей.

diff --git a/components/Something.php b/components/Something.php
new file mode 100644
index 0000000..18e0379
--- /dev/null
+++ b/components/Something.php
@@ -0,0 +1,10 @@
+namespace app\components;
+
+use yii\base\Component;
+
+class Something extends Component {
+    
+    const A = [];
+
+    public $b;
+}
\ No newline at end of file
diff --git a/config/console.php b/config/console.php
index 299656a..42e80d5 100644
--- a/config/console.php
+++ b/config/console.php
@@ -13,6 +13,14 @@ $config = [
         '@npm'   => '@vendor/npm-asset',
         '@tests' => '@app/tests',
     ],
+    'container' => [
+        'definitions' => [
+            \app\components\Something::class => [
+                'class' => \app\components\Something::class,
+                'b' => \app\components\Something::A
+            ],
+        ],
+    ],
     'components' => [
         'cache' => [
             'class' => 'yii\caching\FileCache',


Стоит мне сослаться на константу этого класса, все тут же падает, так как автозагрузчик не может найти указанный класс.
/vhosts/yii2-app-basic$ ./yii
PHP Fatal error:  Uncaught Error: Class 'app\components\Something' not found in /vhosts/yii2-app-basic/config/console.php:20
Stack trace:
#0 /vhosts/yii2-app-basic/yii(17): require()
#1 {main}
  thrown in /vhosts/yii2-app-basic/config/console.php on line 20


Без упоминания \app\components\Something::A все прекрасно работает.

Что я делаю не так?
  • Вопрос задан
  • 156 просмотров
Подписаться 1 Простой 4 комментария
Пригласить эксперта
Ответы на вопрос 1
Рабочий вариант:

'container' => [
        'definitions' => [
            \app\components\Something::class => function() {
                return new \app\components\Something([
                    'b' => \app\components\Something::A,
                ]);
            },
        ],
    ],
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы