Laravel 契約
laravel契約是一套由框架提供的各種功能和核心服務的接口。
例如, illuminate \ contracts \ queue \ queue 合同使用排隊作業所需的方法, illuminate \ contracts \ mail \ mailer 使用該方法發送電子郵件。
每個定義的合同都包含相應的框架實施。所有的laravel合同都可以在github倉庫中找到,如下所述 -
https://github.com/illuminate/contracts
該存儲庫提供了laravel框架中可用的各種合約,可以相應地下載和使用它們。
重點
在處理laravel合同時,請注意以下重要事項 -
- 在類的構造函數中定義外墻是強制性的。
- 合同在類中明確定義,您不需要在構造函數中定義合同。
例
考慮下面提到的用于laravel授權的合同 -
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
合同的使用類似于facade,用于創建強大的,經過良好測試的laravel應用程序。合同和外墻的使用有各種 實際的差異 。
以下代碼顯示了如何使用合同來緩存存儲庫 -
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; } }
合同不包含實現和新的依賴關系; 編寫指定契約的替代實現很容易,因此用戶可以在不修改任何代碼庫的情況下替換緩存實現。