2016-11-20 1 views
2

정면 용 네임 스페이스를 가져 오는 올바른 방법은 무엇입니까 (예 : Hash::make)?Laravel facades를 사용하거나 가져 오는 올바른 방법은 무엇입니까?

use Illuminate\Support\Facades\Hash과 같은 가져 오기를 사용해야합니까?

사람들을 \Hash::make (기본적으로 생성되는 컨트롤러와 같은 네임 스페이스 파일) 또는 Hash::make (경로와 같은 네임 스페이스가없는 파일에서)으로 사용하는 사람들이있었습니다.

namespace { 
exit("This file should not be included, only analyzed by your IDE"); 

class Hash extends \Illuminate\Support\Facades\Hash{   
    /** ... */ 
    public static function make($value, $options = array()){ 
     return \Illuminate\Hashing\BcryptHasher::make($value, $options); 
    } 

하지만이 클래스가없는 루트 네임 스페이스에, Illuminate\Support\Facades\ 네임 스페이스에있는 경우 작동 왜 이해가 안 :

또한 ide-helper 루트 네임 스페이스에 외관을 생성합니다.

답변

6

Facade와 Aliases를 비교합니다.

Illuminate\Support\Facades\Hash은 외관 클래스이지만 \Hash은 그 외관에 대한 별칭 클래스입니다. 당신의 config/app.php에서 살펴보고 그들이 매핑되는 것은 방법 :

'aliases' => [ 
    'App'  => Illuminate\Support\Facades\App::class, 
    'Artisan' => Illuminate\Support\Facades\Artisan::class, 
    'Auth' => Illuminate\Support\Facades\Auth::class, 
    // ... 
당신은 \Hash 별칭 또는 Illuminate\Support\Facades\Hash 외관 클래스를 사용할 수 있습니다

; 둘 다 옳다.

부트 스트랩 단계에서 Laravel은 AliasLoader이라는 서비스를 사용합니다. config/app.php에서 별칭 배열을 가져와 모든 요소를 ​​반복하고 PHP spl_autoload_register을 사용하여 __autoload 함수의 대기열을 만듭니다.

__autoload 함수는 PHP의 class_alias 함수를 사용하여 각각의 facade 클래스에 대한 별칭을 생성합니다. 따라서 클래스를 사용하기 전에 클래스를 가져오고 별칭을 지정할 필요가 없습니다.

더 읽기 : 것 같다
How Laravel Facades Work and How to Use Them Elsewhere

+2

hm. 나는 왜'artisan make : ...'에 의해 생성 된 모든 파일들이 별명을 사용하지 않고'\ Schema' 나'Use Schema' 대신에'Use Illuminate \ Support \ Facades \ Schema'와 같은 완전한 namespace 임포트를 포함하는지 궁금합니다. – AlexP11223

+1

Don 원저자의 생각을 잘 모르고 있지만 여기에 2 센트입니다. 둘 다 정확하지만 외관이 빠릅니다. Donno는 속도가 훨씬 빠르지 만 자동로드 대기열에서 작동하므로 이유가있을 수 있습니다. 반면에 별칭의 존재 이유는 사용의 용이성입니다. 파사드의 FQDN을 기억할 필요는 없으며 루트 네임 스페이스에서 멋진 별칭을 사용하기 만하면됩니다. 코드를 생성 할 때 더 이상 그렇지 않습니다. 왜 별칭을 무시하지 않으시겠습니까? – sepehr

3

config/app.php 파일에 aliases의 목록을 볼 수 있습니다. Hash가이 포함되어 있습니다, 그래서 당신은 단지 use Hash;

\Hash::make를 사용하여 Hash를 가져올 수 있습니다, 여기 \ 루트 네임 스페이스를 참조하는 것입니다. 따라서 Hashuse Hash을 사용하여 가져 오거나 직접 사용하십시오. \Hash::make

+0

당신이 laravel 마스터. 너를 도와 줘. 여기를보십시오 : http://stackoverflow.com/questions/41047583/how-to-add-dynamic-dropdown-list-column-on-laravel-5-3-registration –

+0

안녕하세요, 늦게 답장을 보내 주셔서 감사합니다. 이미 답을 얻은 것 같아요. 그것을 시도하십시오. – shoieb0101

관련 문제