PHP добавление пользовательского пространства имен с помощью автозагрузчика от композитора

Вот моя структура папок:

Classes
  - CronJobs
    - Weather
      - WeatherSite.php

Я хочу загрузить класс WeatherSite из моего script. Я использую композитор с автозагрузкой:

$loader = include(LIBRARY .'autoload.php');
$loader->add('Classes\Weather',CLASSES .'cronjobs/weather');
$weather = new Classes\Weather\WeatherSite();

Im, предполагая, что указанный выше код добавляет пространство имен и путь, к которому разрешено пространство имен. Но когда загружается страница, я всегда получаю эту ошибку:

 Fatal error: Class 'Classes\Weather\WeatherSite' not found

Вот мой файл WeatherSite.php:

namespace Classes\Weather;

class WeatherSite {

    public function __construct()
    {

    }

    public function findWeatherSites()
    {

    }

}

Что я делаю неправильно?

Ответ 1

На самом деле вам не нужен пользовательский автозагрузчик, вы можете использовать PSR-4.

Обновите свой раздел autoload в composer.json:

"autoload": {
    "psr-4": {
        "Classes\\Weather\\": "Classes/CronJobs/Weather"
    }
}

Чтобы объяснить: это {"Пространство имен \\": "каталог, который находится в"}

Не забудьте запустить composer dump-autoload для обновления кэша Composer.

Тогда вы можете использовать это так:

include(LIBRARY .'autoload.php');

$weather = new Classes\Weather\WeatherSite();