2013-12-07 14 views
6

psr-0自動ロードメカニズムを使用して自分のクラス/ファイルで作業するように作者を見せていないようです。誰もが以下のことがうまくいかない理由についていくつかの光を発することができますか?Composerが自分のpsr-0ファイルをロードしていません

私は私のエラーログに次の出力を取得しています:

PHP Fatal error: Class 'TestdirTest1' not found in /home/webroot/bitlama/index.php on line 5

それがない作品、私は明示的なコメントを解除しステートメントを必要とする場合(index.phpを:2)。

誰かが疑問を持っているなら、私はコンポーザーを「php ../composer.phar install」という形式でインストールしています。

これは私のディレクトリ構造です:

├── composer.json 
├── index.php 
├── testspacedir 
│   └── Testdir 
│    └── test1.php 
└── vendor 
    ├── autoload.php 
    └── composer 
     ├── autoload_classmap.php 
     ├── autoload_namespaces.php 
     ├── autoload_real.php 
     └── ClassLoader.php 

はcomposer.json:

{ 
    "autoload": { 
     "psr-0": { "Testdir\\": "testspacedir/"} 
    } 
} 

test1.php:

<?php 

namespace Testdir; 

class Test1 { 

    public function __construct() 
    { 
     echo "Woohoo Test1"; 
    } 

} 

のindex.php:

<?php 
require 'vendor/autoload.php'; 
//require 'testspacedir/Testdir/test1.php'; 

$test1 = new Testdir\Test1(); 

ベンダー/ autoload.php:

<?php 

// autoload.php @generated by Composer 

require_once __DIR__ . '/composer' . '/autoload_real.php'; 

return ComposerAutoloaderInit7b4760e0f7ca9d6454dd2f098c374ba4::getLoader(); 
+0

'vendor/composer/autoloader_namespaces.php'を見てください。これには、配列キーと正しいフォルダとして名前空間を含む行が含まれている必要があります。 – Sven

答えて

3

からの抜粋私のクラスファイルではなくTest1.phpの必要PSR-0命名規則のtest1.phpと名付けたです。

+0

これはあなたの答えとしてマークしてください。 – Richard

0

あなたはrequire 'testspacedir/Testdir/test1.php';を削除し、それが正しいですので、それが動作すると言います。

autoloadの名前空間 - >フォルダ構造をcomposer.jsonに定義しているので、vendor/autoload.phpはこれらのフォルダの読み込みを処理します。

その中のvendor/autoload.phpファイルを見ると、あなた自身が表示されます。

まとめてみると、ファイルの自動読み込みが処理されるので、これを実行する必要はありません。ここでhttp://getcomposer.org/doc/01-basic-usage.md#autoloading

Note: Composer provides its own autoloader. If you don't want to use that one, you can just include vendor/composer/autoload_namespaces.php, which returns an associative array mapping namespaces to directories.

+0

私はそれが明示的にそのrequireステートメントを持っている場合にのみ動作すると言います。そうでなければ動作しません - 私は致命的なエラーが発生します。 –

+0

私は混乱しています。手動で 'autoload.php'を手に入れて、すべてがチェックアウトされ、すべてのパスが正しく設定されているかどうか確認してください。 – SamV

+0

かなり正直ではありません。私は元の質問をautoload.phpの内容で編集しました –