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();