2017-12-23 42 views
0

私は、自分のクラスの読み込みのために私のアプリケーションとコンポーザーのオートロードの下位フレームワークとしてSlim PHPを使用しています。PSR-4 Autoloaderがサブフォルダ構造内のクラスを認識しない

"psr-4": { 
     "App\\": "app/classes/" 
    } 

すべての私のクラスは、/アプリ/クラス/フォルダにあります。作曲家で、私はこのPSR-4の構成を有しています。

私のクラスフォルダには私はすべての共通クラスがありますが、モジュール固有のクラスはサブフォルダにあります。

私が対応する名前空間の下に、このメソッドを持っています私の../classes/connect.phpファイルから:私はoffice.phpと呼ばれるファイルを持っている../classes/office/私のサブフォルダに

namespace App; 
class connect 
{ 
    public function authenticate(){ 
    office\AuthenticationManager::acquireAppToken(200); 
    } 
} 

この方法で:上記の方法は

../classes/api.phpに位置する別のメソッドを呼び出している

namespace App\office; 
    class AuthenticationManager 
    { 
     public function acquireAppToken($tid) 
     { 
      \App\APIManager\RequestManager::sendPostRequest(); 
     } 
    } 

そのファイル内の名前空間は

0123です
namespace App\APIManager; 

問題は、この最後の方法で呼び出すときに、私は次のエラーを取得することです: 「\アプリケーション\ APIManager \ RequestManagerが」見つからない...

私はすでに作曲でこれを解決しようとしましたdump- autoload、それは役に立たなかった。このエラーはなぜ発生しますか?

+0

別クラスの静的関数を別の名前空間のクラス内から呼び出すのは悪いことです。依存性注入を使用するほうがはるかに優れています。 – ArtisticPhoenix

答えて

3

RequestManagerという名前のクラスをApp\APIManager名前空間に入れたい場合は、ファイルをAPIManager/RequestManager.phpに配置する必要があります。

またoffice/AuthenticationManager.php

に移動させなければならないAuthenticationManagerクラスに適用されるがPSR-4 examplesを見てください。

関連する問題