web-dev-qa-db-fra.com

PHP ajout d'un espace de noms personnalisé à l'aide du chargeur automatique de composer

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?

20
John

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();
36
Tomáš Votruba