Laravel - 合同



Laravel 合同是一組介面,包含框架提供的各種功能和核心服務。

例如,Illuminate\Contracts\Queue\Queue 合同使用一個用於佇列作業的方法,而 Illuminate\Contracts\Mail\Mailer 使用一個用於傳送郵件的方法。

每個定義的合同都包含框架相應的實現。所有 Laravel 合同都可以在以下提到的 GitHub 倉庫中找到:

https://github.com/illuminate/contracts

此倉庫提供了 Laravel 框架中可用的各種合同,可以下載並根據需要使用。

要點

在使用 Laravel 合同時,請注意以下要點:

  • 必須在類的建構函式中定義門面。

  • 合同在類中顯式定義,無需在建構函式中定義合同。

示例

考慮下面提到的 Laravel 中用於授權的合同:

<?php

namespace Illuminate\Contracts\Auth\Access;

interface Authorizable{
   /**
      * Determine if the entity has a given ability.
      *
      * @param string $ability
      * @param array|mixed $arguments
      * @return bool
   */
   public function can($ability, $arguments = []);
}

該合同使用一個名為 can 的函式,其中包含一個名為 ability 的引數和一個使用使用者標識(以陣列形式)的引數

您需要按照以下語法定義合同:

interface <contract-name>

合同類似於門面,用於建立健壯且經過良好測試的 Laravel 應用程式。在使用合同和門面方面存在各種實際差異

以下程式碼演示瞭如何使用合同來快取儲存庫:

<?php

namespace App\Orders;
use Illuminate\Contracts\Cache\Repository as Cache;

class Repository{
   /**
      * The cache instance.
   */
   
   protected $cache;
   
   /**
      * Create a new repository instance.
      *
      * @param Cache $cache
      * @return void
   */
   
   public function __construct(Cache $cache) {
      $this->cache = $cache;
   }
}

合同不包含任何實現和新依賴項;很容易編寫指定合同的替代實現,因此使用者可以替換快取實現而無需修改任何程式碼庫。

廣告