语法

修改理由:
相关信息:
- 类型:文档文章
- 文章: Facades
- 文档: 《Laravel 9 中文文档(9.x)》
此投稿由 保安 在 2年前 合并。
标题修改:
内容修改:
Old | New | Differences |
---|---|---|
1 | ||
2 | 1 | # Facades |
3 | 2 | |
4 | 3 | - [简介](#introduction) | … | … |
12 | 11 | <a name="introduction"></a> |
13 | 12 | ## 简介 |
14 | 13 | |
15 | 在整个 Laravel 文档中,您将看到通过 Facades 与 Laravel 特性交互的代码示例。Facades 为应用程序的 [服务容器 ](/docs/laravel/9.x/container)中可用的类提供了 | |
16 |
| |
17 | Laravel Facades 充当服务容器中底层类的 | |
18 |
| |
19 | Laravel 的所有 Facades 都在 | |
14 | 在整个 Laravel 文档中,您将看到通过 Facades 与 Laravel 特性交互的代码示例。Facades 为应用程序的 [服务容器 ](/docs/laravel/9.x/container)中可用的类提供了「静态代理」。在 Laravel 这艘船上有许多 Facades,提供了几乎所有 Laravel 的特征。 | |
15 | ||
16 | Laravel Facades 充当服务容器中底层类的「静态代理」,提供简洁、富有表现力的好处,同时保持比传统静态方法更多的可测试性和灵活性。如果你不完全理解引擎盖下的 Facades 是如何工作的,那也没问题,跟着流程走,继续学习 Laravel。 | |
17 | ||
18 | Laravel 的所有 Facades 都在 `Illuminate\Support\Facades` 命名空间中定义。因此,我们可以很容易地访问这样一个 Facades: | |
20 | 19 | |
21 | 20 | use Illuminate\Support\Facades\Cache; |
22 | 21 | use Illuminate\Support\Facades\Route; | … | … |
32 | 31 | |
33 | 32 | 为了补充 Facades,Laravel 提供了各种全局 「助手函数」,使它更容易与常见的 Laravel 功能进行交互。可以与之交互的一些常用助手函数有 `view`, `response`, `url`, `config`,等。Laravel 提供的每个助手函数都有相应的特性;但是,在专用的 [辅助函数文档](/docs/laravel/9.x/helpers) 中有一个完整的列表。 |
34 | 33 | |
35 | ||
36 | ||
34 | ||
35 | ||
37 | 36 | 例如,我们可以简单地使用 `response` 函数,而不是使用 `Illuminate\Support\Facades\Response` Facade 来生成 JSON 响应。因为 helper 函数是全局可用的,所以不需要导入任何类就可以使用它们: |
38 | 37 | |
39 | 38 | use Illuminate\Support\Facades\Response; | … | … |
62 | 61 | |
63 | 62 | 依赖注入的主要好处之一是能够交换注入类的实现。这在测试期间非常有用,因为您可以注入一个 mock 或 stub 并断言在 stub 上调用了各种方法。 |
64 | 63 | |
65 | ||
66 | ||
67 | 通常,真正的静态方法是不可能 mock 或 stub 的。 | |
64 | ||
65 | ||
66 | 通常,真正的静态方法是不可能 mock 或 stub 的。但是由于 Facades 使用动态方法对服务容器中解析出来的对象方法的调用进行了代理, 我们也可以像测试注入类实例一样测试 Facades。比如,像下面的路由: | |
68 | 67 | |
69 | 68 | use Illuminate\Support\Facades\Cache; |
70 | 69 | … | … |
72 | 71 | return Cache::get('key'); |
73 | 72 | }); |
74 | 73 | |
75 | 使用 Laravel 的 Facade 测试方法, | |
74 | 使用 Laravel 的 Facade 测试方法,我们可以编写以下测试用例来验证是否 `Cache::get` 使用我们期望的参数调用了该方法: | |
76 | 75 | |
77 | 76 | use Illuminate\Support\Facades\Cache; |
78 | 77 | … | … |
95 | 94 | <a name="Facades 相较于辅助函数"></a> |
96 | 95 | ### Facades 相较于辅助函数 |
97 | 96 | |
98 | 除了 Facades,Laravel 还包含各种 | |
97 | 除了 Facades,Laravel 还包含各种「辅助函数」来实现这些常用功能,比如生成视图、触发事件、任务调度或者发送 HTTP 响应。许多辅助函数都有与之对应的 Facade。例如,下面这个 Facades 和辅助函数的作用是一样的: | |
99 | 98 | |
100 | 99 | return Illuminate\Support\Facades\View::make('profile'); |
101 | 100 | … | … |
127 | 126 | $response->assertSee('value'); |
128 | 127 | } |
129 | 128 | |
130 | ||
131 | ||
129 | ||
130 | ||
132 | 131 | <a name="how-facades-work"></a> |
133 | 132 | ## Facades 工作原理 |
134 | 133 | … | … |
175 | 174 | |
176 | 175 | 相反,`Cache` Facade 继承了 `Facade` 基类并定义了 `getFacadeAccessor()` 方法。此方法的工作是返回服务容器绑定的名称。当用户引用 `Cache` Facade 上的任何静态方法时,Laravel 会从 [服务容器](/docs/laravel/9.x/container) 中解析 `cache` 绑定并运行该对象请求的方法(在这个例子中就是 `get` 方法) |
177 | 176 | |
178 | ||
179 | ||
177 | ||
178 | ||
180 | 179 | <a name="实时 Facades"></a> |
181 | 180 | ## 实时 Facades |
182 | 181 | … | … |
205 | 204 | } |
206 | 205 | } |
207 | 206 | |
208 | 将 publisher 的实现注入到该方法中,我们可以轻松地测试这种方法,因为我们可以模拟注入的 publisher 。但是,它要求我们每次调用 `publish` 方法时始终传递一个 publisher 实例。 使用实时的 Facades, 我们可以保持同样的可测试性,而不需要显式地通过 `Publisher` 实例。要生成实时 Facade,请在导入类的名称空间中加上 `Facades` | |
207 | 将 publisher 的实现注入到该方法中,我们可以轻松地测试这种方法,因为我们可以模拟注入的 publisher 。但是,它要求我们每次调用 `publish` 方法时始终传递一个 publisher 实例。 使用实时的 Facades, 我们可以保持同样的可测试性,而不需要显式地通过 `Publisher` 实例。要生成实时 Facade,请在导入类的名称空间中加上 `Facades`: | |
209 | 208 | |
210 | 209 | <?php |
211 | 210 | … | … |
259 | 258 | } |
260 | 259 | } |
261 | 260 | |
262 | ||
263 | ||
261 | ||
262 | ||
264 | 263 | <a name="facade-class-reference"></a> |
265 | 264 | ## Facade 类参考 |
266 | 265 | |
267 | 在下面你可以找到每个 Facade 类及其对应的底层类。这是一个查找给定 Facade 类 API 文档的工具。 | |
266 | 在下面你可以找到每个 Facade 类及其对应的底层类。这是一个查找给定 Facade 类 API 文档的工具。[服务容器绑定](/docs/laravel/9.x/container) 的关键信息也包含在内。 | |
268 | 267 | |
269 | 268 | Facade | 类 | 服务容器绑定 |
270 | 269 | ------------- | ------------- | ------------- | … | … |
315 | 314 | Validator (Instance) | [Illuminate\Validation\Validator](https://laravel.com/api/laravel/9.x/Illuminate/Validation/Validator.html) | |
316 | 315 | View | [Illuminate\View\Factory](https://laravel.com/api/laravel/9.x/Illuminate/View/Factory.html) | `view` |
317 | 316 | View (Instance) | [Illuminate\View\View](https://laravel.com/api/laravel/9.x/Illuminate/View/View.html) | |
317 | ||
318 | 318 | |
319 |