2016-04-12 6 views
0

私はオートローディングと名前空間が新しく、MVCプロジェクトに名前空間を追加しようとしました。 PHP - 名前空間が見つかりませんでした。プロジェクトを作曲者と共にオートロード

は、だから私の作曲家で、私は、コメントを追加しました:

"autoload": { 
    "psr-0": { 
     "prj\\app\\": "app/", 
     "prj\\app\\controller\\": "app/controller/", 
     "prj\\app\\classes\\": "app/classes/" 
    } 
} 

そして更新作曲とautodumpコマンドを実行しました。 、

use \app\classes\engine; // use statement I tried 

Fatal error: Uncaught Error: Class 'app\classes\engine' not found in C:\inetpub\wwwroot\web\index.php:87 Stack trace: #0 {main} thrown in C:\inetpub\wwwroot\web\index.php on line 87 

名前空間を使用してクラスを見つけることができない理由を私はよく分からない:

は、私は、しかし、私はちょうど戻って、次の取得これらの名前空間のいずれかを使用しようとする私のアプリに戻りました

PRJ 
├───app 
│ ├───classes 
│ └───controller 
├───web 
│ └───index.php 
├───vendor 
│ ├───bin 
│ ├───composer 
│ ├───... 
└───view 
    ├───bootstrap 
    └───default 

/appには、コントローラやクラスなどのロジックが格納されています。

/webはウェブルートです.index.phpは訪問者が見ているページであり、すべてがここで処理されます。

/vendorは、私の依存関係が保存されているcomposerディレクトリです。

答えて

2

間違ったことがいくつかあります。まず第一に、あなたのcomposer.jsonで重複した名前空間を追加している:

ライン:

"prj\\app\\": "app/", 

限り:彼らはすでにによって覆われているよう

"prj\\app\\controller\\": "app/controller/", 
"prj\\app\\classes\\": "app/classes/" 

は不要ですディレクトリがappの場合、使用する名前空間の名前と一致します。明示的に定義する必要はありません。だから、あなただけ追加することができます。

"autoload": { 
    "psr-0": { 
     "prj\\app\\": "app/" 
    } 
} 

は第二に、あなたのuse文はオフに思える、あなたがしようとしている:あなたが同じ名前空間に既にある場合

use \app\classes\engine; 

を先頭のスラッシュは、ここにneccessaryすべきではありません。さらに、prj\appではなくappという名前空間をオートロードするので、prjビットがありません。 (これはappフォルダ内のファイルがある場合)には次のようになります。あなたがそれらを追跡していないようだと

<?php 

namespace prj\app\controller; 

use prj\app\classes\engine; 

class MyController 
{ 
    /** 
    * @var engine 
    */  
    private $engine; 

    public function __construct() 
    { 
     // This should now work since engine should be autoloaded 
     $this->engine = new engine(); 
    } 
} 

PSR-0 naming conventionsを見てみましょう。クラス名と名前空間のフォルダは、app\classes\engineの代わりにApp\Classes\Engineのように大文字にする必要があります。

+0

こんにちは、私は自分のアプリにこれらの変更を加えましたが、今このコントローラに関連付けられている経路にアクセスすると、「無効なコールバックが指定されました」というエラーが表示されます。 これは私が最初に引数はコントローラにマッピングする必要がありますが、2番目の引数はコントローラのメソッドを指す必要があります。 $ app-> route( 'GET/test'、array( 'AutoController'、 'index')) ; – mhvvzmak1

+0

ルーティングファイルはapp/routing/*。phpにあり、foreachを使用してweb/index.phpに必要です。 – mhvvzmak1

関連する問題