Voici ma structure de dossiers:
Classes
- CronJobs
- Weather
- WeatherSite.php
Je veux charger la classe WeatherSite à partir de mon script. J'utilise composer avec chargement automatique:
$loader = include(LIBRARY .'autoload.php');
$loader->add('Classes\Weather',CLASSES .'cronjobs/weather');
$weather = new Classes\Weather\WeatherSite();
Je suppose que le code ci-dessus ajoute l'espace de noms et le chemin vers lequel l'espace de noms se résout. Mais lorsque la page se charge, j'obtiens toujours cette erreur:
Fatal error: Class 'Classes\Weather\WeatherSite' not found
Voici mon fichier WeatherSite.php:
namespace Classes\Weather;
class WeatherSite {
public function __construct()
{
}
public function findWeatherSites()
{
}
}
Qu'est-ce que je fais mal?
En fait, vous n'avez pas besoin d'un chargeur automatique personnalisé, vous pouvez utiliser PSR-4.
Mettez à jour votre section autoload
dans composer.json
:
"autoload": {
"psr-4": {"Classes\\Weather\\": "Classes/CronJobs/Weather"}
}
Pour expliquer: c'est le répertoire {"Namespace \\": "à trouver dans"}
N'oubliez pas d'exécuter composer dump-autoload
pour mettre à jour Composer cache.
Ensuite, vous pouvez l'utiliser comme ceci:
include(LIBRARY .'autoload.php');
$weather = new Classes\Weather\WeatherSite();