2016-06-30 13 views
1

質問/回答が適用されていますが、オートローダが適切な回答を認識するのに十分ではないと思います。First Composerパッケージ - オートローダが動作しない

. 
./vendor 
./vendor/autoload.php 
./vendor/Pva_agent 
./vendor/Pva_agent/Agent.php 
./vendor/Pva_agent/composer.json 
./vendor/Pva_agent/.gitignore 
./vendor/composer 
./vendor/composer/autoload_psr4.php 
./vendor/composer/autoload_real.php 
./vendor/composer/autoload_classmap.php 
./vendor/composer/autoload_namespaces.php 
./vendor/composer/installed.json 
./vendor/composer/autoload_static.php 
./vendor/composer/ClassLoader.php 
./vendor/composer/LICENSE 
./composer.lock 
./composer.json 
./test_pva_agent.php 

私のテストプログラム:

<?php 
require_once('vendor/autoload.php'); 

use Pva_agent\Agent; 

$agent = new Agent(); 

パッケージの作曲をインストールした後

{ 
    "name": "Pva_agent", 
    "type":"library", 
    "description" : "query the pva agent", 
    "version":"0.1b", 
    "authors" : [ 
     { 
      "name":"Ed Greenberg", 
      "email":"[email protected]" 
     } 
    ], 
    "minimum-stability":"dev", 
    "require": {}, 
    "autoload": { 
     "psr-0": { 
      "Pva_agent": "." 
     } 
    } 

} 

私のディレクトリ構造:

は、私は次のcomposer.jsonとのパッケージを持っています結果:

[email protected] pva_project $ php test_pva_agent.php 
PHP Fatal error: Class 'Pva_agent\Agent' not found in /home/edg/PhpstormProjects/pva_project/test_pva_agent.php on line 6 
PHP Stack trace: 
PHP 1. {main}() /home/edg/PhpstormProjects/pva_project/test_pva_agent.php:0 
[email protected] pva_project $ 

オートローダーがクラスを見つけられるはずなので、私は 'use'ステートメントは必要ないと思ったのですか?

問題がどこにあるか教えていただけますか?

おかげで、あなたのPva_agentライブラリがvendor/ディレクトリに座るべきではありません

エド・グリーンバーグ

答えて

0

。このディレクトリには、Composerからの自動生成データのみが含まれている必要があります。このディレクトリは通常、VCSに格納されません。

あなたはこれと似たものにディレクトリ構造をリファクタリングを検討する必要があります。

. 
|____composer.json 
|____composer.lock 
|____src 
| |____Pva_agent 
|____vendor 

あなたのライブラリ機能がsrc/Pva_agentディレクトリに追加する必要があります。

autoloadの機能にPSR-0の代わりにPSR-4を使用することを検討してください。クラスを追加するときにオートローダーを再生成する必要はありません。 dump-autoloaderは、クラスを追加した後にPSR-0の場合に実行する必要があります。ディレクトリ構造については

上記とPSR-4オートローダあなたcomposer.json自動ロードセクションでは、この1のようになります。

"autoload": { 
    "psr-4": { "Pva_agent\\": "src/Pva_agent" } 
} 

あなたのライブラリーが自動この後にロードする必要があります。自動ロードされたライブラリは、Pva_agent名前空間に登録されます。

+0

Hmmm ...ありがとう、ルーカス、あなたの答えはより多くの質問を生成します:)作曲家は私がウェブから入手したものを置くのと同じように、私のライブラリをベンダの下に置きます。 –

+0

作者はあなたのソースコードを 'vendor /'の下に置くべきではありません。 'vendor /'フォルダを掘り下げると、あなたのライブラリへのパスが 'vendor/composer/autoload_psr4.php'に表示されます。例として、私の[PhiKettle library](https://github.com/loftdigital/PhiKettle)の構造をチェックすることができます。プロジェクトをクローンし、 'composer update'を実行してください。 –

関連する問題