使用/导入 Laravel 外观的正确方法是啥?

Posted

技术标签:

【中文标题】使用/导入 Laravel 外观的正确方法是啥?【英文标题】: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\ 命名空间中,而不是在根命名空间中。

【问题讨论】:

【参考方案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 使用

【讨论】:

看来你是 laravel 高手了。我需要你帮忙。看这里:***.com/questions/41047583/… 您好,抱歉回复晚了。我想你已经得到了答案。请尝试一下。

以上是关于使用/导入 Laravel 外观的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

在 laravel 中,使用我从 ajax 过滤的数据将 VUE 组件“附加”到 DOM 的正确方法是啥?

在 laravel 中将“历史数据”存储到数据库中的正确方法是啥?

在 laradock 中安装 laravel 的正确方法是啥?

解决此问题的正确(大多数 Laravel)方法是啥(如果有)

在 Python 中使用多处理,导入语句的正确方法是啥?

导入 jquery.inputmask 的正确方法是啥?