【问题标题】:What is the correct way to use/import Laravel facades?使用/导入 Laravel 外观的正确方法是什么?
【发布时间】:2017-04-03 20:30:47
【问题描述】:

为外观导入命名空间的正确方法是什么(例如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\ 命名空间中,而不是在根命名空间中。

【问题讨论】:

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


    【解决方案1】:

    您正在将 Facades 与 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 函数为各自的外观类创建一个别名。因此,我们不必在使用类之前导入它们并为其命名。

    阅读更多:
    How Laravel Facades Work and How to Use Them Elsewhere

    【讨论】:

    • 嗯。我想知道为什么artisan make:... 生成的所有文件都不使用别名并包含完整的命名空间导入,如use Illuminate\Support\Facades\Schema 而不仅仅是\Schemause Schema
    • 不知道原作者的想法,但这是我的 2 美分:两者​​都是正确的,但显然,外观更快。 Donno 有多快,但它可以围绕自动加载队列工作,所以这可能是原因。另一方面,别名存在的原因是它们的易用性。您不必记住外观的 FQDN,只需使用根命名空间中的花哨别名。生成代码时,情况不再如此。那么为什么不忽略别名呢?
    【解决方案2】:

    在您的config/app.php 文件中,您可以看到aliases 的列表。 Hash 包含在其中,因此您可以使用 use Hash; 导入 Hash

    \Hash::make,这里的\ 是从根命名空间引用的。因此,您可以使用use Hash 导入顶部的Hash 或直接使用\Hash::make 使用

    【讨论】:

    猜你喜欢
    • 2016-10-27
    • 2019-09-04
    • 2016-01-11
    • 2019-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 2012-07-23
    相关资源
    最近更新 更多