0

Composer が動作していて、そのオートローダーを使用してクラスをロードしたいのですが、動作しません。これが私のディレクトリ構造です。始めはとてもシンプルにしています。

index.php
composer.json
Vendor
controllers/webgl.php

私が持っているwebgl.phpの中に:

namespace controllers;

class webgl {
    public function lesson1() {

    }
}

index.php には次のものがあります。

require('vendor/autoload.php');
//require_once('controllers/webgl.php');

$webglController = new \controllers\webgl;

そして、私の composer.json は、オートロード用にこれを定義しています:

"autoload": { 
    "psr-4": { 
        "controllers\\": "controllers/" 
    } 
}

2 番目の require のコメントを外すと、スクリプトは機能します。そうしないと、「致命的なエラー: クラス 'controllers\webgl' が 5 行目の /vagrant/index.php に見つかりません」というメッセージが表示されます。

フォルダー構造、クラスの名前空間、クラス名はすべてpsr-4に準拠していると思いました。しかし、私は何かを誤解しているに違いありません。同様の質問をたくさん読んだことがありますが、私のためにそれを並べ替えることができた人はいません。

クラスがロードされない理由と、それを修正するために何をすべきか誰か教えてもらえますか?

4

2 に答える 2

1

autoload ディレクティブを定義しましたか?

これを composer.json ファイルに追加する必要があります。

"autoload": {
    "psr-4": {
        "controllers\\": "controllers/"
    }
}

オートローダーを正しい方向に向けて実行する

composer update  

プロジェクトディレクトリのターミナルから。これで、ファイルを明示的に要求せずにクラスがロードされます。

于 2015-05-26T19:38:05.817 に答える
1

composer dump-autoloadに変更を加えた後は、少なくとも実行するようにしてくださいcomposer.jsoncomposer installまたはcomposer updateそれも行います。

あなたの質問とコメントから、独自のコードのオートローディング定義を追加した後にコマンドを実行しなかったようです。

于 2015-05-26T22:29:10.790 に答える