2017-04-22 2 views
1

작곡가 발견 설치
모두 잘 작동 약간의 패키지를,하지만 지금 나는 그것을 그런 서비스의 이름 공간을 준
폴더 서비스에서 내 자신의 클래스를 생성하지 :내가 작곡가와 laravel을 설치

네임 스페이스 서비스;

그리고 클래스 이름은

UploadToImgurService 내가 작곡가의 명령을 실행입니다 :

composer dump-autoload 

그리고 내 컨트롤러에 내가 쓴

가 :

:

use Services\UploadToImgurService; 

하지만이 오류를

Class 'Services\UploadToImgurService' not found 

내가 뭘 잘못 했니? 서비스 클래스 자동로드를 위해 작곡가와 관련하여해야 할 것이 있습니까?

내가
내가 y를 composer.json 파일을 편집 솔루션을 발견하고 PSR-4 라인

 "Services\\" : "app/services" 

을 추가하지만, 왜 이전에 workt하지 않았다 EDIT? 라인 :

"App\\": "app/", 

은 어쩌면 클래스하지만 응용 프로그램 네임 스페이스에서로드가 있었다?

답변

0

당신의 생각은 맞지만, psr-4 자동 로딩이 어떻게 작동하는지 설명하겠습니다.

composer.json 파일에 루트 네임 스페이스를 정의하고 프로젝트 디렉토리에 매핑 할 수 있습니다. 정의 된 디렉토리에서 클래스는 루트 네임 스페이스를 가져야합니다. 루트 다음의 네임 스페이스 세그먼트는 하위 디렉토리 구조에 의해 빌드되며 클래스 이름은 파일 이름 (PSR-4 Autoloading과 동일합니다. Laravel에서

예컨대는 "MyNamespace\\WithSubNamespace\\": "cool/project"

cool/project/MyClass.php -> MyNamespace\WithSubNamespace\MyClass

cool/project/SubDirectory/AnotherClass.php -> MyNamespace\WithSubNamespace\SubDirectory\AnotherClass

, 응용 프로그램 디렉토리는 기본적으로 앱 네임 스페이스에 매핑됩니다. 선택적으로 php artisan app:name [NewRootNamespaceName] 명령을 사용하여 루트 네임 스페이스를 변경할 수 있지만 자동 로더는 app 디렉토리 내의 클래스 만 찾습니다. "app"외부에서 새 디렉토리를 만드는 경우 composer.json 파일의 psr-4 네임 스페이스 매핑에 디렉토리를 추가해야합니다.

예를 들어, 기존 app 디렉토리에 새 루트 네임 스페이스를 정의 했으므로 루트 네임 스페이스를 알 수 없었고 composer.json에 해당 행을 추가하여 문제를 해결할 수있었습니다. psr-4는 큰 유연성을 제공하기 때문에 가능합니다.그러나 개인적으로 동일한 프로젝트에서 다른 루트 네임 스페이스를 사용하지 않는 것이 좋습니다.

제가 도와 드릴 수 있으면 좋겠지 만 이것은 또한 당신에게 흥미로울 것입니다 : composer.json PSR-4.

+0

감사합니다. 이제 마침내 그 점을 이해했습니다. –

2

대소 문자를 구분하는 파일 시스템을 사용하는 경우 Services 폴더에 대문자 S이 있어야합니다.