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 также сделаю это.

Из вашего вопроса и комментариев кажется, что вы не запустили команду после добавления определения автозагрузки для своего собственного кода.

Другие вопросы по тегам