2017-04-19 19 views
0

이전에 작성한 자동 로딩 시스템을 변경하려고합니다. 나는 작곡가를 사용하고 있으며 현재 클래스지도가있는 라이브러리를 하나만 자동로드하고 있습니다.composer autoload classmap with psr-4

"autoload": { 
"classmap": ["libs/"] 
} 

나는 파일의 나머지 부분에 대한 PSR-4 로더를 추가하고, 네임 스페이스없이 가지 laravel의 별명처럼 '을 "사용"없이 libs와 아래에있는 파일을 호출 할 수 있어야합니다. 이것은 내가 할 노력하고있어입니다 :

"autoload": { 
"classmap": ["libs/"], 
"psr-4": { 
    "App\\": "" 
} 
} 

그래서 결국 "libs와"나는로 전화 드렸습니다 세션 클래스가있는 경우 다음을 추가하려고 후 지금

Session::get('anything') 

하지만를 psr-4를 호출하고 이름 공간 클래스 내에서 호출합니다.

namespace App\models; 

Class User{ 
function get(){ 
    return Session::get('anything'); 
} 
} 

사용자의 네임 스페이스 내에서 세션을 찾기 때문에 더 이상 작동하지 않습니다. 별칭을 사용하여 상자를 구현 한 많은 프레임 워크가 있다는 것을 알고 있습니다.이 프로젝트는 다소 오래되었으며, 조금만 구성하여 어디에서나 필요한 모든 것을 제거하려고합니다. 모델이 필요합니다.

+0

\ Session :: get ('anything');'now like this –

답변

0

나는 파일의 나머지 부분에 대한 PSR-4 로더를 추가하고, 네임 스페이스없이 가지 laravel의 별명처럼 '을 "사용"없이 libs와 아래에있는 파일을 호출 할 수 있어야합니다.

당신은 use을 추가 또는 백 슬래시 \로 시작하는 정규화 된 네임 스페이스 경로를 추가하거나하지 않고 클래스를 사용할 수 없습니다. 이 클래스를로드하는 방식과는 아무 관련이 없지만 PHP 자체의 기본적인 요구 사항입니다. 따라서 자동 로딩을 어떻게 디자인하든 관계 없습니다.

으로는 백 슬래시를 추가하는 작업, 주석, 그러나 이것은 필요한 최소되었습니다

namespace App\models; 
Class User{ 
    function get(){ 
    return \Session::get('anything'); 
    } 
} 
+0

좋아요, 너무 많은 변경으로 인해 발생하지 않을 것입니다. 어떻게 laravel이 그것을합니까? 클래스 맵과 마찬가지로 호출 할 수있는 별칭 배열을 정의한다는 의미입니다. –

+0

Laravel의 설명서에서 원하는 것을 설명 할 수 있으면 해당 작업을 이해할 수 있습니다. 그러나 Laravel조차도 PHP 구문 규칙을 위반할 수 없기 때문에 원하는 것을 할 수 있을지는 의문입니다. Laravel 기능에 대해 오해 한 것 같지만이 시점에서는 판단 할 수 없습니다. – Sven

0

내가 그렇게 원하는 classses 별명 것은 내가 그들에게 전화 할 수있을 것입니다 다른 클래스를 작성 결국했습니다 상자 밖으로.

당신은 여기에서 볼 수 있습니다

https://github.com/shahafan/SAmvc-App/blob/master/Config/Aliases.php

을 기본적으로 난 그냥 그렇게 내가 사용하기 전에 원하는 모든 클래스를로드 할 수 PHP는 class_alias 기능을 사용하고 있습니다. laravel도 같은 방식으로 생각합니다.