语法
修改理由:
相关信息:
- 类型:文档文章
- 文章: Facades
- 文档: 《Laravel 9 中文文档(9.x)》
此投稿由 保安 在 3年前 合并。
标题修改:
内容修改:
| 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 |
关于 LearnKu