Fatal error: Uncaught Error: Class "..." not found in
Помогите пожалуйста новичку. Поставил фреймворк Yii2. Перенес свои файлы в директорию и не получается использовать ни свои классы, ни классы фреймворка. Скриншот composer, ошибка и файлы классов прикрепляю. Перешарил весь англо и русско язычный интернет. Не смог найти информации, которая бы помогла. При подключении класса напрямую командой require DIR . '/../models/Test.php'; скрипт работает. Не работает настройка автозагрузчика
Тестируемый класс:
<?php
namespace app\models;
require_once __DIR__ . '/../vendor/autoload.php';
class Test
{
public function PrintHello () {
return 'Hello World!';
}
}
Тестируемый скрипт:
<?php
use app\models\Test;
require_once __DIR__ . '/../vendor/autoload.php';
$obj = new Test;
var_dump($obj->PrintHello());
Сценарий автозагрузчика:
"autoload": {
"psr-4": {
"taskforce\\": "src/"
}
}
Код ошибки:
Fatal error: Uncaught Error: Class "app\models\Test" not found in C:\Applications\OSPanel\domains\taskforce\src\index.php:6
Stack trace:
#0 {main}
thrown in C:\Applications\OSPanel\domains\taskforce\src\index.php on line 6
UPD: пишу, возможно как даун, зато как есть. Как я все делаю: создал класс, в нем указал неймспейс, написал метод. Далее создаю тестовый сценарий, там в первой строке(очевидно, кроме строки открытия файла) подключаю автозагрузчик, далее создаю новый экземпляр класс и через вар дамп пишу его метод. Строку use автозагрузчик прописывает автоматически, ее я не трогаю.
UPD 2.0: Свои классы в папке src я заставил работать. Сложность была в том, что в нейспейсе моих классов было taskforce/src/ClassName, а надо было просто taskforce. Классовую структуру фреймворка так пока и не могу заставить работать
Ответы (1 шт):
не работал в Yii, но судя по всему в вашем psr-4 указан один namespace, а реально используется другой. Т.е composer не знает где искать ваш namespace app. Файл конфигурации composer'a находится в той же директории что и весь код, что немного необычно, но тем не менее, означает, что текущая директория и является этим namespace, что и нужно указать в конфигурации.
"autoload": {
"psr-4": {
"app\\": "."
}
},
посоветовал бы использовать заглавные буквы в названии namespace'ов, что является общепринятой практикой.
Если не заработает, то шаги по дебагу я указал в комментарии к вопросу



