2016-06-30 11 views
1

적용된 질문/답변을 찾기 위해 최선을 다했지만 오토로더가 적합한 대답을 인식 할만큼 충분히 이해하지 못했습니다.첫 번째 작곡가 패키지 - 오토로더가 작동하지 않음

. 
./vendor 
./vendor/autoload.php 
./vendor/Pva_agent 
./vendor/Pva_agent/Agent.php 
./vendor/Pva_agent/composer.json 
./vendor/Pva_agent/.gitignore 
./vendor/composer 
./vendor/composer/autoload_psr4.php 
./vendor/composer/autoload_real.php 
./vendor/composer/autoload_classmap.php 
./vendor/composer/autoload_namespaces.php 
./vendor/composer/installed.json 
./vendor/composer/autoload_static.php 
./vendor/composer/ClassLoader.php 
./vendor/composer/LICENSE 
./composer.lock 
./composer.json 
./test_pva_agent.php 

내 테스트 프로그램 :

<?php 
require_once('vendor/autoload.php'); 

use Pva_agent\Agent; 

$agent = new Agent(); 

패키지의 작곡가 설치 후

{ 
    "name": "Pva_agent", 
    "type":"library", 
    "description" : "query the pva agent", 
    "version":"0.1b", 
    "authors" : [ 
     { 
      "name":"Ed Greenberg", 
      "email":"[email protected]" 
     } 
    ], 
    "minimum-stability":"dev", 
    "require": {}, 
    "autoload": { 
     "psr-0": { 
      "Pva_agent": "." 
     } 
    } 

} 

내 디렉토리 구조 :

나는 다음과 같은 composer.json와 패키지를 내 결과 :

[email protected] pva_project $ php test_pva_agent.php 
PHP Fatal error: Class 'Pva_agent\Agent' not found in /home/edg/PhpstormProjects/pva_project/test_pva_agent.php on line 6 
PHP Stack trace: 
PHP 1. {main}() /home/edg/PhpstormProjects/pva_project/test_pva_agent.php:0 
[email protected] pva_project $ 

오토로더가 클래스를 찾아야하므로 '사용'문이 필요하지 않다고 생각 했습니까?

누군가가 문제가있는 곳을 말해 줄 수 있습니까? 귀하의 Pva_agent 라이브러리가 vendor/ 디렉토리에 앉아서는 안

답변

0

감사합니다,

에드 그린버그. 이 디렉토리는 Composer의 자동 생성 데이터 만 포함해야합니다. 이 디렉토리는 일반적으로 VCS에 저장되지 않습니다.

당신이 유사한 무언가에 디렉토리 구조를 리팩토링 고려해야합니다

. 
|____composer.json 
|____composer.lock 
|____src 
| |____Pva_agent 
|____vendor 

라이브러리 기능은 src/Pva_agent 디렉토리에 추가해야합니다.

autoload 기능의 경우 PSR-0 대신 PSR-4를 사용하는 것이 좋습니다. 클래스를 추가 할 때 오토로더를 재생성 할 필요가 없기 때문입니다. dump-autoloader은 분류 된 후에 PSR-0의 경우에 실행되어야합니다. 위의 디렉토리 구조와 composer.json 자동로드 섹션이 하나의 유사해야 PSR-4 오토로더

:

"autoload": { 
    "psr-4": { "Pva_agent\\": "src/Pva_agent" } 
} 

라이브러리는 자동이 후로드해야합니다. 자동로드 된 라이브러리는 Pva_agent 네임 스페이스 아래에 등록됩니다.

+0

흠 ... 고마워, 루카스,하지만 당신의 대답은 더 많은 질문을 생성합니다 :) 작곡가는 웹에서 가져온 모든 자료를 넣는 것처럼 내 라이브러리를 공급 업체에 넣습니다. –

+0

작곡가는 소스 코드를'vendor /'아래에 두어서는 안됩니다. 'vendor /'폴더를 들여다 보면 라이브러리의 경로가'vendor/composer/autoload_psr4.php'에 있어야합니다. 예를 들어 내 [PhiKettle 라이브러리] (https://github.com/loftdigital/PhiKettle)의 구조를 확인할 수 있습니다. 프로젝트를 복제하고'composer update'를 실행하십시오. –