
- Laravel 教程
- Laravel - 首頁
- Laravel - 概述
- Laravel - 安裝
- Laravel - 應用結構
- Laravel - 配置
- Laravel - 路由
- Laravel - 中介軟體
- Laravel - 名稱空間
- Laravel - 控制器
- Laravel - 請求
- Laravel - Cookie
- Laravel - 響應
- Laravel - 檢視
- Laravel - Blade 模板
- Laravel - 重定向
- Laravel - 資料庫操作
- Laravel - 錯誤 & 日誌
- Laravel - 表單
- Laravel - 本地化
- Laravel - 會話
- Laravel - 驗證
- Laravel - 檔案上傳
- Laravel - 傳送郵件
- Laravel - Ajax
- Laravel - 錯誤處理
- Laravel - 事件處理
- Laravel - 門面
- Laravel - 合同
- Laravel - CSRF 保護
- Laravel - 認證
- Laravel - 授權
- Laravel - Artisan 控制檯
- Laravel - 加密
- Laravel - 雜湊
- 理解發布流程
- Laravel - 客人使用者許可權
- Laravel - Artisan 命令
- Laravel - 分頁自定義
- Laravel - Dump Server
- Laravel - Action URL
- Laravel 有用資源
- Laravel - 快速指南
- Laravel - 有用資源
- Laravel - 討論
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; } }
合同不包含任何實現和新依賴項;很容易編寫指定合同的替代實現,因此使用者可以替換快取實現而無需修改任何程式碼庫。
廣告