14

我对 Laravel 提供的 Facades 感到困惑。

Laravel文档指出:

外观为应用程序服务容器中可用的类提供“静态”接口。Laravel 附带了许多外观,它们提供了对 Laravel 几乎所有功能的访问。Laravel 外观充当服务容器中底层类的“静态代理”,提供简洁、富有表现力的语法的好处,同时保持比传统静态方法更多的可测试性和灵活性。

请帮助我理解:

  1. 为什么我们真正使用use Illuminate\Support\Facades
  2. 如何创建自定义外观?
4

3 回答 3

19

SitePoint提供道具,用于分享有关 Laravel 中立面的此类信息丰富且有用的知识。

外观模式是一种软件设计模式,经常用于面向对象的编程中。

外观是包装复杂库的类,以提供更简单、更易读的接口。

立面图案

Laravel 的外墙

外观为应用程序服务容器中可用的类提供“静态”接口。Laravel 附带了许多外观,它们提供了对 Laravel 几乎所有功能的访问。Laravel 外观充当服务容器中底层类的“静态代理”,提供简洁、富有表现力的语法的好处,同时保持比传统静态方法更多的可测试性和灵活性。

Laravel 中的 Facades 是如何实现的

容器内的每个服务都有一个唯一的名称。在 Laravel 应用程序中,要直接从容器访问服务,我们可以使用App::make()方法或 app() 辅助函数。

<?php

App::make('some_service')->methodName();

在 Laravel 中,所有服务都有一个外观类。这些外观类扩展了作为包一部分的基本外观类Illuminate/Support。他们唯一需要实现的是 getFacadeAccessor 方法,该方法返回容器内的服务名称。

于 2017-02-15T07:05:55.230 回答
5

你可以通过这个例子来理解

DB::table('table_name')->get();  

在这个例子中,DB是门面。它正在调用DB 外观table()上的静态方法。

于 2018-07-26T07:27:37.583 回答
5

一般而言,立面(发音为 /fəˈsɑːd/)是建筑物或任何东西的外部和正面。立面的重要性在于它们很容易被注意到并且更加突出,同样在 laravel 中也有立面的概念。它们用于管理我们的代码可读性并通过它构建易于记忆的函数和类的语法。

Laravel 外观是一个类,它为服务容器内的服务提供类静态接口。它们充当访问 laravel 服务的底层实现的代理。例如在web.php文件中写入以下代码

//using redis cache
Route::get('/cache', function () {
    cache()->put('hello','world', 600);
    dd(cache()->get('hello')); //outputs world
});

上面的例子是使用非静态方式调用缓存的方法现在让我们看看我们如何使用缓存外观。

use Illuminate\Support\Facades\Cache;
//using redis cache
Route::get('/cache', function () {
    Cache::put('hello','world', 600);
    dd(Cache::get('hello'));
});

你不觉得上面的例子更优雅,语法更容易记住,对吧?这就是外墙的美。

于 2019-07-27T05:49:35.957 回答