几天内即可获得 Laravel 代码审查方面的专家指导

了解如何在 Laravel 中创建自定义 Facades

最后更新于 经过

学习如何在 Laravel 图片中创建自定义外观

Laravel Facades 是 Laravel 框架的一个很棒的功能,它通过简单的界面提供对服务的便捷访问。当我第一次学习 Laravel 时,有一件事让我感到困惑,那就是 Facade 访问器方法。

一旦你理解了 Facade 是访问 Laravel 服务容器中底层服务的便捷方式,你就可以轻松跟踪任何 Facade 背后的服务。每个 Facade 都提供了一个 getFacadeAccessor() 指向注册服务名称的方法。

以下是外观访问器的一个例子 DB 正面:

// Illuminate\Support\Facades\DB;
受保护 静止的 功能 获取FacadeAccessor ()
{
返回 'db' ;
}

因此, 'db' 字符串指向容器中的一个服务,外观将使用它来解析。如果你跳转到 tinker 会话中,你可以自己尝试一下:

一些 Facades 可能会解析为管理器类,然后将方法动态传递给底层宏或数据库连接类:

民众 功能 __称呼 ($方法,$参数)
{
如果 静止的:: 有宏 ($method)) {
返回 $this -> 宏调用 ($方法,$参数);
}
返回 $this -> 联系 () -> $method( ... $参数);
}

当没有连接调用时,DatabaseManager 将使用默认连接( sqlite 在我上面的例子中),并在该连接上调用方法。

我建议阅读 Laravel 中 Facades 的工作原理 文档 ,其中还有一个 Facade 列表 参考 可通过框架获取。

在 Laravel 中创建自己的 Facades

如果您不直接创建插件或使用 Laravel 框架,为什么还要在应用程序中创建 Facade?有些开发人员更喜欢只对应用程序代码中定义的服务使用依赖注入,这很好。但是,我发现通过帮助程序或 App\Facades 命名空间。我喜欢 Laravel 的灵活性,同时仍然制定约定,以便在不熟悉的代码库中提高工作效率。

要在应用程序代码中创建 Facade,我建议使用 make:class 命令来生成 Facade,您可以按如下方式操作:

php artisan make:class App/Facades/Example

假设你在应用服务提供商中定义了一项服务,名为 App\ExampleService ;然后您可以在生成类之后为其创建一个 Facade:

命名空间 应用\立面 ;
使用 照明\支持\立面\立面 ;
班级 例子 延伸 正面
{
民众 静止的 功能 获取FacadeAccessor ()
{
返回 'example_service' ;
}
}

如果您没有定义别名,您可以轻松地将 Facade 访问器设为完全限定类的字符串,或者在服务提供者中使用字符串来定义它:

民众 静止的 功能 获取FacadeAccessor ()
{
返回 \App\ExampleService ::班级 ;
}

Facades 具有在测试中直接模拟底层服务类的便利性:

使用 应用程序\立面\示例 ;
例子 :: 应该接收 'getLatestPosts'
-> (日期之后)
-> 并返回 ($test_posts)

如果你不使用 Facade,Laravel 还提供了其他方便的模拟方法,例如 partialMock() 方便地在测试中将服务替换为模拟。使用该服务,您可以直接在测试中执行此操作,如下所示:

模拟 = $this -> 部分模拟 我的 API 服务 ::班级 , 功能 模拟界面 $mock) {
模拟 -> 应该接收 'getLatestPosts'
-> (日期之后)
-> 并返回 ($test_posts)
});

由您决定要采用的方法,但如果您在应用程序中大量使用服务,请考虑创建一个 Facade,以便在使用服务时提供一些便利,而不会丢失依赖注入提供的功能。

保罗·雷德蒙德照片

Laravel News 特约撰稿人。全栈 Web 开发人员兼作家。

归档于:
立方体

Laravel 时事通讯

加入超过 4 万名开发者的行列,不错过任何新的技巧、教程等内容。

图像
Jump24 - 英国 Laravel 代理机构

Laravel 开发人员,精通技术,绝不外包,绝不离岸外包,始终卓越。

访问 Jump24 - 英国 Laravel 代理机构
Tinkerwell 徽标

廷克威尔

Laravel 开发者必备的代码运行器。可在本地和生产环境中体验 AI、自动补全和即时反馈功能。

廷克威尔
几天内即可获得 Laravel 代码审查徽标的专家指导

几天内即可获得 Laravel 代码审查方面的专家指导

专家级代码审查!两位拥有 10 年以上 Laravel 开发经验的开发者将为您提供清晰、实用的反馈,帮助团队构建更优质的应用程序。

几天内即可获得 Laravel 代码审查方面的专家指导
PhpStorm 标志

PhpStorm

首选的 PHP IDE,对 Laravel 及其生态系统提供广泛的开箱即用支持。

PhpStorm
Laravel Cloud 标志

Laravel 云

轻松创建和管理服务器,并在几秒钟内部署 Laravel 应用程序。

Laravel 云
了解 Softtech 的标志

了解软科技

Acquaint Softtech 提供 AI 就绪的 Laravel 开发人员,48 小时内即可上手,每月费用为 3000 美元,没有冗长的销售流程,并提供 100% 退款保证。

了解软科技
Kirschbaum 标志

樱桃树

提供创新和稳定性,确保您的Web应用程序取得成功。

樱桃树
Shift 标志

转移

还在运行旧版本的 Laravel?立即实现 Laravel 自动升级和代码现代化,让您的应用程序保持最新状态。

转移
鱼叉:新一代时间跟踪和发票标志

Harpoon:新一代时间跟踪和发票系统

新一代时间跟踪和计费软件,帮助您的机构规划和预测盈利的未来。

Harpoon:新一代时间跟踪和发票系统
Lucky Media 标志

幸运传媒

Get Lucky Now——拥有十余年经验的 Laravel 开发理想之选!

幸运传媒
SaaSykit:Laravel SaaS 入门套件徽标

SaaSykit:Laravel SaaS 入门套件

SaaSykit 是一个多租户 Laravel SaaS 入门套件,包含运行现代 SaaS 所需的所有功能,例如支付、美观的结账界面、管理面板、用户仪表盘、身份验证、现成组件、统计数据、博客、文档等等。

SaaSykit:Laravel SaaS 入门套件
MongoDB 徽标

MongoDB

Enhance your PHP applications with the powerful integration of MongoDB and Laravel, empowering developers to build applications with ease and efficiency. Support transactional, search, analytics and mobile use cases while using the familiar Eloquent APIs. Discover how MongoDB's flexible, modern database can transform your Laravel applications.

MongoDB
Ship AI with Laravel: Stop Your AI Agent from Guessing image

Ship AI with Laravel: Stop Your AI Agent from Guessing

阅读文章
Laravel Cloud Adds Path Blocking to Prevent Bots From Waking Hibernated Apps image

Laravel Cloud Adds Path Blocking to Prevent Bots From Waking Hibernated Apps

阅读文章
Making Laravel MongoDB Operations Idempotent: Safe Retries for Financial Transactions image

Making Laravel MongoDB Operations Idempotent: Safe Retries for Financial Transactions

阅读文章
FormRequest Strict Mode and Queue Job Inspection in Laravel 13.4.0 image

FormRequest Strict Mode and Queue Job Inspection in Laravel 13.4.0

阅读文章
Pretty PHP Info: A Modern Replacement for `phpinfo()` image

Pretty PHP Info: A Modern Replacement for `phpinfo()`

阅读文章
Laracon US 2026 Announced image

Laracon US 2026 Announced

阅读文章