PHP Composer Autoloader Простая структура
У меня работает Composer, и я хотел бы использовать его автозагрузчик для загрузки моих классов, но он не работает. Вот моя структура каталогов. Я держу это действительно простым для начала.
index.php
composer.json
Vendor
controllers/webgl.php
Внутри webgl.php у меня есть:
namespace controllers;
class webgl {
public function lesson1() {
}
}
В index.php у меня есть:
require('vendor/autoload.php');
//require_once('controllers/webgl.php');
$webglController = new \controllers\webgl;
И мой composer.json определяет это для автозагрузки:
"autoload": {
"psr-4": {
"controllers\\": "controllers/"
}
}
Если я раскомментирую второе требование, скрипт работает, в противном случае я получаю "Неустранимая ошибка: класс 'controllers\webgl' не найден в /vagrant/index.php в строке 5".
Я думал, что структура папок, пространство имен классов и имя класса соответствуют psr-4. Но я, должно быть, что-то неправильно понимаю. Я прочитал множество похожих вопросов, но ни один из них не смог мне их разобрать.
Может кто-нибудь сказать мне, почему мой класс не загружается и что я должен сделать, чтобы это исправить?
2 ответа
Вы определили директиву автозагрузки?
Вам нужно добавить это в ваш файл composer.json:
"autoload": {
"psr-4": {
"controllers\\": "controllers/"
}
}
чтобы указать автозагрузчик в правильном направлении, а затем запустить
composer update
из терминала в каталоге вашего проекта. Теперь класс будет загружаться без явного запроса его файла.
Убедитесь, что вы работаете хотя бы composer dump-autoload
после внесения изменений в ваш composer.json
, composer install
или же composer update
также сделаю это.
Из вашего вопроса и комментариев кажется, что вы не запустили команду после добавления определения автозагрузки для своего собственного кода.