2016-11-20 3 views
2

ファサードの名前空間をインポートする正しい方法は何ですか(Hash::makeなど)?Laravelファサードを使用/インポートする正しい方法は何ですか?

use Illuminate\Support\Facades\Hashのようなインポートを使用する必要がありますか?

\Hash::make(デフォルトで作成されたコントローラなどの名前空間ファイルから)またはHash::make(ルートなどの非名前空間ファイルからのもの)として使用している人がいました。

またide-helperルート名前空間でファサードを生成します。

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\名前空間ではなく、ルート名前空間である場合、それが動作する理由を私は理解していません。

答えて

6

ファサードとエイリアスを比較しています。

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関数を使用して、それぞれのファサードクラスのエイリアスを作成します。その結果、クラスを使用する前にクラスをインポートしたりエイリアスする必要はありません。

続きを読む:
How Laravel Facades Work and How to Use Them Elsewhere

+2

hm。私はなぜ 'artisan make:...'によって生成されたすべてのファイルがエイリアスを使わず、 '\ Schema'や' use Schema'の代わりに 'Use Illuminate \ Support \ Facades \ Schema'のような完全な名前空間インポートを含むのだろうかと疑問に思う。 – AlexP11223

+1

Don元の著者が何を考えていたかは分かりませんが、ここに私の2セントがあります:どちらも正しいですが、明らかにファサードはより速いです。どんどん速くなりますが、自動ロードキューの周りで動作するので、その理由が考えられます。一方、エイリアスの存在理由は使いやすさです。ファサードのFQDNを覚えておく必要はなく、ルート名前空間からファンシーエイリアスを使用するだけです。コードを生成するとき、それはもはやそうではありません。なぜエイリアスを無視しないのですか? – sepehr

3

config/app.phpファイルには、aliasesのリストが表示されます。 Hashがそこに含まれているので、あなただけのuse Hash;

\Hash::makeを使用してHashをインポートすることができ、ここで\ルート名前空間から参照することです。そのため、use Hashを使用してHashをインポートするか、直接使用してください。\Hash::make

+0

あなたがlaravelを習得するようです。私はあなたの助けが必要です。ここを見てください:http://stackoverflow.com/questions/41047583/how-to-add-dynamic-dropdown-list-column-on-laravel-5-3-registration –

+0

遅い返事をおかけして申し訳ありません。あなたはすでに答えがあると思います。それを試してください。 – shoieb0101

関連する問題