playmaker 2年前

修改理由:

语法

相关信息:


此投稿由 保安 2年前 合并。

标题修改:

+ Facades

内容修改:

红色背景 为原始内容

绿色背景 为新增或者修改的内容

OldNewDifferences
1  
21# Facades
32
43- [简介](#introduction)
 
1211<a name="introduction"></a>
1312## 简介
1413
15 在整个 Laravel 文档中,您将看到通过 Facades 与 Laravel 特性交互的代码示例。Facades 为应用程序的 [服务容器 ](/docs/laravel/9.x/container)中可用的类提供了 『静态代理』。在 Laravel 这艘船上有许多 Facades,提供了几乎所有 Laravel 的特征。
16 
17 Laravel Facades 充当服务容器中底层类的 『静态代理』,提供简洁、富有表现力的好处,同时保持比传统静态方法更多的可测试性和灵活性。如果你不完全理解引擎盖下的 Facades 是如何工作的,那也没问题,跟着流程走,继续学习 Laravel。
18 
19 Laravel 的所有 Facades 都在 `Illuminate\Support\Facades` 命名空间中定义。因此,我们可以很容易地访问这样一个 Facades:
 14在整个 Laravel 文档中,您将看到通过 Facades 与 Laravel 特性交互的代码示例。Facades 为应用程序的 [服务容器 ](/docs/laravel/9.x/container)中可用的类提供了「静态代理」。在 Laravel 这艘船上有许多 Facades,提供了几乎所有 Laravel 的特征。
 15
 16Laravel Facades 充当服务容器中底层类的「静态代理」,提供简洁、富有表现力的好处,同时保持比传统静态方法更多的可测试性和灵活性。如果你不完全理解引擎盖下的 Facades 是如何工作的,那也没问题,跟着流程走,继续学习 Laravel。
 17
 18Laravel 的所有 Facades 都在 `Illuminate\Support\Facades` 命名空间中定义。因此,我们可以很容易地访问这样一个 Facades:
2019
2120   use Illuminate\Support\Facades\Cache;
2221   use Illuminate\Support\Facades\Route;
 
3231
3332为了补充 Facades,Laravel 提供了各种全局 「助手函数」,使它更容易与常见的 Laravel 功能进行交互。可以与之交互的一些常用助手函数有 `view`, `response`, `url`, `config`,等。Laravel 提供的每个助手函数都有相应的特性;但是,在专用的 [辅助函数文档](/docs/laravel/9.x/helpers) 中有一个完整的列表。
3433
35 
36 
 34
 35
3736例如,我们可以简单地使用 `response` 函数,而不是使用 `Illuminate\Support\Facades\Response` Facade 来生成 JSON 响应。因为 helper 函数是全局可用的,所以不需要导入任何类就可以使用它们:
3837
3938   use Illuminate\Support\Facades\Response;
 
6261
6362依赖注入的主要好处之一是能够交换注入类的实现。这在测试期间非常有用,因为您可以注入一个 mock 或 stub 并断言在 stub 上调用了各种方法。
6463
65 
66 
67 通常,真正的静态方法是不可能 mock 或 stub 的。 但是由于 Facades 使用动态方法对服务容器中解析出来的对象方法的调用进行了代理, 我们也可以像测试注入类实例一样测试 Facades。比如,像下面的路由:
 64
 65
 66通常,真正的静态方法是不可能 mock 或 stub 的。但是由于 Facades 使用动态方法对服务容器中解析出来的对象方法的调用进行了代理, 我们也可以像测试注入类实例一样测试 Facades。比如,像下面的路由:
6867
6968   use Illuminate\Support\Facades\Cache;
7069
 
7271       return Cache::get('key');
7372   });
7473
75 使用 Laravel 的 Facade 测试方法, 我们可以编写以下测试用例来验证是否 `Cache::get` 使用我们期望的参数调用了该方法:
 74使用 Laravel 的 Facade 测试方法,我们可以编写以下测试用例来验证是否 `Cache::get` 使用我们期望的参数调用了该方法:
7675
7776   use Illuminate\Support\Facades\Cache;
7877
 
9594<a name="Facades 相较于辅助函数"></a>
9695### Facades 相较于辅助函数
9796
98 除了 Facades,Laravel 还包含各种 『辅助函数』 来实现这些常用功能,比如生成视图、触发事件、任务调度或者发送 HTTP 响应。许多辅助函数都有与之对应的 Facade。例如,下面这个 Facades 和辅助函数的作用是一样的:
 97除了 Facades,Laravel 还包含各种「辅助函数」来实现这些常用功能,比如生成视图、触发事件、任务调度或者发送 HTTP 响应。许多辅助函数都有与之对应的 Facade。例如,下面这个 Facades 和辅助函数的作用是一样的:
9998
10099   return Illuminate\Support\Facades\View::make('profile');
101100
 
127126       $response->assertSee('value');
128127   }
129128
130 
131 
 129
 130
132131<a name="how-facades-work"></a>
133132## Facades 工作原理
134133
 
175174
176175相反,`Cache` Facade 继承了 `Facade` 基类并定义了 `getFacadeAccessor()` 方法。此方法的工作是返回服务容器绑定的名称。当用户引用 `Cache` Facade 上的任何静态方法时,Laravel 会从 [服务容器](/docs/laravel/9.x/container) 中解析 `cache` 绑定并运行该对象请求的方法(在这个例子中就是 `get` 方法)
177176
178 
179 
 177
 178
180179<a name="实时 Facades"></a>
181180## 实时 Facades
182181
 
205204       }
206205   }
207206
208 将 publisher 的实现注入到该方法中,我们可以轻松地测试这种方法,因为我们可以模拟注入的 publisher 。但是,它要求我们每次调用 `publish` 方法时始终传递一个 publisher 实例。 使用实时的 Facades, 我们可以保持同样的可测试性,而不需要显式地通过 `Publisher` 实例。要生成实时 Facade,请在导入类的名称空间中加上 `Facades`:
 207将 publisher 的实现注入到该方法中,我们可以轻松地测试这种方法,因为我们可以模拟注入的 publisher 。但是,它要求我们每次调用 `publish` 方法时始终传递一个 publisher 实例。 使用实时的 Facades, 我们可以保持同样的可测试性,而不需要显式地通过 `Publisher` 实例。要生成实时 Facade,请在导入类的名称空间中加上 `Facades`
209208
210209   <?php
211210
 
259258       }
260259   }
261260
262 
263 
 261
 262
264263<a name="facade-class-reference"></a>
265264## Facade 类参考
266265
267 在下面你可以找到每个 Facade 类及其对应的底层类。这是一个查找给定 Facade 类 API 文档的工具。 [服务容器绑定](/docs/laravel/9.x/container) 的关键信息也包含在内。
 266在下面你可以找到每个 Facade 类及其对应的底层类。这是一个查找给定 Facade 类 API 文档的工具。[服务容器绑定](/docs/laravel/9.x/container) 的关键信息也包含在内。
268267
269268Facade | 类 | 服务容器绑定
270269------------- | ------------- | -------------
 
315314Validator (Instance) | [Illuminate\Validation\Validator](https://laravel.com/api/laravel/9.x/Illuminate/Validation/Validator.html) | &nbsp;
316315View | [Illuminate\View\Factory](https://laravel.com/api/laravel/9.x/Illuminate/View/Factory.html) | `view`
317316View (Instance) | [Illuminate\View\View](https://laravel.com/api/laravel/9.x/Illuminate/View/View.html) | &nbsp;
 317  
318318
319