2014-03-24 1 views
0

이전에 꽤 간단한 자동로드 스크립트가 작동했지만 Doctrine2가이 작업에 대해 Composer를 사용하고 있음을 알았 기 때문에 모든 작업을 간소화 할 수 있다고 생각했습니다. 안타깝게도, 작곡가는 내가 이해할 때 제대로 작동하지 않는 것 같습니다.네임 스페이스를 사용하여 작곡가와 PHP 자동 로딩

여기 Doctrine2에 의해 사용되는 "": "models/" 라인이 잘 작동되었다는 것을 내 composer.json

"autoload": { 
    "psr-0": { 
     "": "models/", 
     "Catalog2\\Config": "class/" 
    } 
} 

주의 관련 부분이다. 내가 composer update를 실행 한 후, 내 공급 업체/작곡가/autoload_namespaces.php의 바닥 부분과 같이 보인다 :

'Doctrine\\Common\\' => array($vendorDir . '/doctrine/common/lib'), 
'Catalog2\\Config' => array($baseDir . '/class'), 
'' => array($baseDir . '/models'), 

지금까지 너무 좋아, 나는 생각한다. 내 routes.php 파일 (기본적으로 프런트 컨트롤러)에서 나는 다음과 같습니다

여기
<?php 
use Catalog2\Config; 

//autoload classes 
require_once __DIR__.'/vendor/autoload.php'; 

try { 
    $router = new Router; 
} catch(Exception $e) { 
    echo "<strong>Can't create router object</strong><br/>"; 
} 

Catalog2 \ 구성 \ 라우터해야 내 수업이 /로 시작 Router.php는 다음 호출 수 :

<?php 
namespace Catalog2\Config; 

class Router { 
    protected $resource; //what are we manipulating? A product? An order? 
    protected $action; //what are we doing with that resource? 
것은 내가 페이지로 이동하면

난이 얻을 :

Fatal error: Class 'Router' not found in /home/tom/Code/productCatalog2/routes.php on line 14 

잘못 여기서 뭐하는거야? Doctrine2가/models에서 내 모델 코드를 자동로드 할 수 있었다는 것을 반복합니다. 왜 내 변경 사항이 작동하지 않습니까?

답변

2

PSR-0에 따르면 네임 스페이스 접두사는 이 경로에 포함되어이됩니다.

그래서 클래스에 대한 전체 파일 이름은 다음과 같아야합니다 예상처럼
class/Catalog2/Config/Router.php 

한편 PSR-4 행동 것 : 그냥 네임 스페이스 접두사와 일치하고, 지정된 경로에 추가를 추가하지 않습니다.

참고 :

PS : 당신은 아마 네임 스페이스 접두사가 "Catalog2\\Config\\"

+0

당신은 생명의 은인이야 (후행 슬래시를 참조)되고 싶어요. 나는 composer.json에서 psr-4를 사용하려고 시도했을 때 psr-4 경로에 대한 별도의 자동 로더를 생성한다는 것을 알았습니다. 동일한 애플리케이션에서 두 표준을 모두 사용하는 것이 가능합니까? –

+0

둘 다 정의 할 수 있습니다. – zerkms

관련 문제