使用/进口Laravel外墙的正确方法是什么?

时间:2016-11-20 11:14:57

标签: php laravel laravel-5 namespaces laravel-5.3

导入外墙命名空间的正确方法是什么(例如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\命名空间中,而不是在根命名空间中,我不明白它为什么会起作用。

2 个答案:

答案 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