【问题标题】:What is Facades used in Laravel?Laravel 中使用的 Facades 是什么?
【发布时间】:2017-07-02 14:45:36
【问题描述】:

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

Laravel documentation 声明:

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

请帮我理解:

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

【问题讨论】:

    标签: php laravel-5 facade laravel-facade


    【解决方案1】:

    感谢SitePoint 分享有关 Laravel 外观的信息丰富且有用的知识。

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

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

    Laravel 中的外墙

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

    Facades 在 Laravel 中是如何实现的

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

    <?php
    
    App::make('some_service')->methodName();
    

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

    【讨论】:

      【解决方案2】:

      一般来说,立面(发音为 /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'));
      });
      

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

      【讨论】:

      • 在第一个示例中,它是否创建了两个不同的cache 实例?
      • @JiechaoWang 不,我们使用不同的可用方式访问同一个缓存实例。
      【解决方案3】:

      你可以通过这个例子理解

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

      在本例中,DB 是外观。它正在 DB 外观 上调用table() 静态方法。

      【讨论】:

      • 我知道 DB 是一个门面。但什么是门面?
      • Facade 简单来说就是为绑定在服务容器中的类的方法提供静态接口的东西,Facade 使用一种神奇的方法来做到这一点。要了解门面,首先要了解什么是服务容器。
      • 在一个真实的例子中,立面可以是您从外面看到的建筑物的外观(漂亮的窗户、亚克力瓷砖、门)。然而,真正的建筑不仅如此,它还是一个由各种东西组成的复杂结构。在软件工程中也是一样,你看不到里面的复杂代码,但只有漂亮的、令人难忘的方法就可以了。
      猜你喜欢
      • 1970-01-01
      • 2020-08-10
      • 1970-01-01
      • 2015-12-19
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 2018-07-02
      • 1970-01-01
      相关资源
      最近更新 更多