使用/导入 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
而不仅仅是\Schema
或use 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 的正确方法是啥?