web-dev-qa-db-ja.com

PHP composer

私のフォルダ構造は次のとおりです。

Classes
  - CronJobs
    - Weather
      - WeatherSite.php

スクリプトからWeatherSiteクラスをロードしたい。 Im composer with autoload:

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

上記のコードが名前空間と名前空間が解決するパスを追加していると仮定しています。しかし、ページがロードされるとき、私は常にこのエラーを受け取ります:

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

WeatherSite.phpファイルは次のとおりです。

namespace Classes\Weather;

class WeatherSite {

    public function __construct()
    {

    }

    public function findWeatherSites()
    {

    }

}

私は何を間違えていますか?

20
John

実際にはカスタムオートローダーは必要ありません。PSR-4を使用できます。

composer.jsonautoloadセクションを更新します。

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

説明するには:{"Namespace \\": "directory to be found in" "}

composer dump-autoloadを実行してComposer=キャッシュを更新することを忘れないでください。

その後、次のように使用できます。

include(LIBRARY .'autoload.php');

$weather = new Classes\Weather\WeatherSite();
36
Tomáš Votruba