2017-12-23 39 views
0

저는 Slim PHP를 내 응용 프로그램의 하위 프레임 워크로 사용하고 있으며, 클래스로드를 위해 작곡가 autoload를 사용하고 있습니다.PSR-4 Autoloader가 하위 폴더 구조의 클래스를 인식하지 못합니다.

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

내 모든 클래스 /응용 프로그램/클래스/ 폴더에 있습니다 작곡가에서 나는이 PSR-4 구성을 가지고있다.

내 수업 폴더에는 공통 클래스가 있지만 하위 폴더에는 모듈 별 클래스가 있습니다. 내가 파일이 office.php 불렀다 ../classes/office/ 내 하위 폴더에서

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

: 내가 해당 네임 스페이스에서이 방법을 데 내 ../classes/connect.php 파일에서

이 방법 : 상기 방법은

../classes/api.php에 위치하는 다른 방법을 호출

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

해당 파일 네임 스페이스는 0123이다

"\ 응용 프로그램 \ APIManager \ RequestManager"을 (를) 찾을 수 없습니다 ... 나는 이미 시도

작곡가 dump-으로이 문제를 해결하기 위해 :

namespace App\APIManager; 

문제는 내가 다음과 같은 오류가이 마지막 방법에 호출 할 때이다 자동로드,하지만 도움이되지 않았다. 이 오류가 발생하는 이유는 무엇입니까?

+0

다른 클래스의 정적 함수를 별도의 네임 스페이스에있는 나쁜 연습이라고 부릅니다. 의존성 주입을 이용하는 것이 훨씬 낫다. – ArtisticPhoenix

답변

3

RequestManager이라는 클래스를 App\APIManager 네임 스페이스에 넣으려면 APIManager/RequestManager.php 파일에 있어야합니다. 또한

office/AuthenticationManager.php로 이동해야 AuthenticationManager 클래스에 적용

PSR-4 examples에서보세요.