导入外墙命名空间的正确方法是什么(例如Hash::make
)?
我是否需要使用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\
命名空间中,而不是在根命名空间中,我不明白它为什么会起作用。
答案 0 :(得分:8)
您正在将Facades与别名进行比较。
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 __autoload
创建spl_autoload_register
函数队列。
每个__autoload
函数负责使用PHP的class_alias
函数为相应的Facade类创建别名。因此,我们不必在使用它们之前导入和别名。
了解更多:
How Laravel Facades Work and How to Use Them Elsewhere
答案 1 :(得分:4)
在config/app.php
文件中,您可以看到aliases
的列表。其中包含Hash
,因此您只需使用Hash
use Hash;
\Hash::make
,此处\
是从根命名空间引用。因此,您可以使用Hash
在顶部导入use Hash
或直接使用\Hash::make