0

すべてのソースがこのように含まれていることを達成する必要があります

$instance = new \d1\d2\d3\app\MyClass();

d1\d2\d3\ はルート ディレクトリを指します。

https://getcomposer.org/doc/04-schema.md#psr-4http://www.php-fig.org/psr/psr-4/の基本を読みました 。https://laracasts.com/lessons/psr-4-autoloadingの例も機能します。

私の問題は次のとおりです。以下のコードを自分のニーズに合わせて少し変更するとすぐに、クラスが見つかりません。(はい、composer.json の変更後にコマンドを発行しcomposer updateます。はい、自己更新を使用してコンポーザーを更新しました)。

したがって、これは機能します:

composer.json

"autoload": { "psr-4": {
"Laracasts\\": "app/Laracasts" } }

index.php

require_once 'vendor/autoload.php'; // According to https://laracasts.com/lessons/psr-4-autoloading $test = new \Laracasts\Repositories\BlogRepository(); $test->hello();

しかし、これはしません:

composer.json

"autoload": { "psr-4": {
"d1\\": "app/Laracasts" } }

index.php

require_once 'vendor/autoload.php'; // According to https://laracasts.com/lessons/psr-4-autoloading $test = new \d1\Repositories\BlogRepository(); $test->hello();

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

IIS 8 で php 5.3.28 を使用しています。

4

1 に答える 1

0

解決しました!

問題は、composer.json で使用される Prefix (この場合は「d1」) を、含めるクラスの Namespace-Prefix としても使用する必要があることでした。そして、以前の投稿を投稿したときはそうではありませんでした。

上記の動作しない例が動作するためには、「d1」の場合、ファイルは次のようになる必要があります。

app\Laracasts\Repositories\BlogRepository.php

namespace d1\Repositories; class BlogRepository { public function hello(){ echo 'hello from a non-root dir!'; } }

index.php

require_once 'vendor/autoload.php'; $test = new \d1\Repositories\BlogRepository(); $test->hello();

composer.json

{ "autoload": { "psr-4": { "d1\\": "app/Laracasts" } } }

d1\d2\d3\ がルート ディレクトリを指すようにするには、上記の 3 つのファイルすべてのプレフィックスを調整し、クラスを含むファイルをルート ディレクトリに移動する必要があります。次に、composer.json を次のように調整します。 "d1\\d2\\d3\\": ""

于 2015-04-28T08:41:55.177 に答える