2014-06-24 11 views
1

저는 의존성 관리를 위해 작곡가를 사용하기 시작했습니다. 어떻게 자동 로딩을 위해 psr-4를 준수하지 않는지 파악하기가 어려워서 조언을 구하기 위해 여기에 있습니다. 이미 packagist에있는 임의의 값을 생성하는 클래스가 있습니다. 프로젝트 구조는 (필자는 composer.json 파일 A와 B를 표시 한) 다음입니다 :PHP 작곡가 autoload가 클래스를로드하지 않습니다

디렉토리 프로젝트

|classfile.php 
A |composer.json 
    |vendor 
    |autoload.php 
    |ejfrancis 
     |php-random-value 
B  |composer.json 
     |RandomValue.php  <--the class I want autoloaded  

composer.json

{ 
    "require": { 
     "ejfrancis/php-random-value": "dev-master" 
    } 
} 

composer.json의 B

{ 
    "name": "ejfrancis/php-random-value", 
    "description": "Secure random value generator.", 
    "require": { 
     "php": ">=5.3.0"   
    }, 
    "license": "MIT", 
    "autoload": { 
     "psr-4": { 
      "ejfrancis\\" : "" 
     } 
    } 
} 

마지막으로 ejfrancis 네임 스페이스를 선언하는 RandomValue.php 파일

namespace ejfrancis; 

class RandomValue{ 
    //foo 
} 

내가 '클래스 RandomValue 찾을 수 없습니다'오류가 발생하므로 올바르게로드되지 않습니다. 나는 psr-4를 따르지 않습니까, 아니면 제가 잘못하고있는 다른 것이 있습니까? 나는 또한 성공을 위해 "classmap" : ["RandomValue.php"] 같은 작곡가 클래스 맵을 사용하여 자동 로딩을 시도했습니다. 도움

업데이트에 대한 감사합니다 : 그것은 꽤 될 수 있도록 내가 composer.json의 B 파일에 '작곡가의 유효성 검사를'실행했습니다, 그것은 확실히 전화

+0

오류가 발생한 코드는 어떻게 보이나요? 내가 보았을 때 올바른 네임 스페이스를 사용하지 못했을 가능성이 높습니다. – Sven

+0

이 (가) 정확한 것처럼 보입니다. 코드는 '$ randomValue = new RandomValue'였습니다. 클래스 파일의 맨 위에 'use ejfrancis \ RandomValue as RandomValue'를 추가했는데 이제는 작동합니다. 이것을 전체 대답으로 추가하고 주석이 아닌 경우에는이를 올바르게 표시 할 것입니다. – ejfrancis

답변

1

오류가 발생한 것처럼 보이는 코드는 어떻게 생겼습니까? 내가 보았을 때 올바른 네임 스페이스를 사용하지 못했을 가능성이 높습니다.

2

임 유효합니다. 작곡가에서 비트가 "Namespace\\"으로 바뀌었고 작곡가 dump-autoload -o

+0

composer.json B의 autoload psr-4 속성을 "ejfrancis \\": ""로 변경하고 'composer dump-autoload -o '는 여전히 클래스를 찾지 못했습니다. – ejfrancis

+0

주 프로젝트에서 작성자 명령을 실행했습니다. dt btw – ejfrancis

+0

composer.json B에서'composer validate '도 실행했습니다. 확실히 유효합니다. 당신은 후행 '\\' – ejfrancis