亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

Laravel5中contracts詳解

2024-05-04 23:31:44
字體:
來源:轉載
供稿:網友
在Laravel5中出現了一個新的東西,叫做contracts,那么它到底是什么?有什么用?怎么用?我們就來探討下吧。
 

我們先來看看官方文檔中對contracts的定義:

Laravel's Contracts are a set of interfaces that define the core services provided by the framework.
意思是說Laravel的Contracts是一個由 框架提供 的定義了 核心服務接口 的集合。

也就是說,每一個Contract都是一個接口,對應一個框架核心服務。

那它的意義何在?官網給出的解釋也很簡單:使用接口是為了 松耦合 和 簡單 。

先不講大道理,先來點干貨,看看怎么使用contract

先瀏覽下contracts接口列表:

 

復制代碼代碼如下:

Illuminate/Contracts/Auth/Guard
Illuminate/Contracts/Auth/PasswordBroker
Illuminate/Contracts/Bus/Dispatcher
Illuminate/Contracts/Cache/Repository
Illuminate/Contracts/Cache/Factory
Illuminate/Contracts/Config/Repository
Illuminate/Contracts/Container/Container
Illuminate/Contracts/Cookie/Factory
Illuminate/Contracts/Cookie/QueueingFactory
Illuminate/Contracts/Encryption/Encrypter
Illuminate/Contracts/Routing/Registrar

 

…… 太多了,懶得繼續貼了,官網手冊里有。我們就拿 Illuminate/Contracts/Routing/Registrar 這個contract來演示一下吧。
首先,打開 app/Providers/AppServiceProvider.php,注意register方法:

 

復制代碼代碼如下:

public function register()
{
    $this->app->bind(
        'Illuminate/Contracts/Auth/Registrar',
        'App/Services/Registrar'
    );
}

 

$this->app 就是Application對象,也是容器對象,通過 $this->app->bind 方法我們綁定了一個實現Illuminate/Contracts/Auth/Registrar接口的類App/Services/Registrar。

注意,Illuminate/Contracts/Auth/Registrar就是一個contract。App/Services/Registrar 這個類文件在 app/Services/Registrar.php。

接著我們看 App/Http/Controllers/Auth/AuthController 這個控制器類,看到它有 __construct 構造函數:

 

復制代碼代碼如下:

public function __construct(Guard $auth, Registrar $registrar)
{
    $this->auth = $auth;
    $this->registrar = $registrar;

 

    $this->middleware('guest', ['except' => 'getLogout']);
}

 

它有兩個參數,對應的類命名空間在腳本開頭可以看到:

 

復制代碼代碼如下:

use Illuminate/Contracts/Auth/Guard;
use Illuminate/Contracts/Auth/Registrar;

 

這兩個都是contract,但我們這里就拿 Registrar 說,我們注意到這里面只是通過參數類型指明了$registrar的接口類型,而實際調用的時候實際上是 App/Services/Registrar 這個類,這就是依賴注入的特性了,Laravel會自動在容器中搜索實現了接口Illuminate/Contracts/Auth/Registrar的類或對象,有的話就取出來作為實際參數傳到構造函數里。

整個使用流程其實就可以總結為兩個步驟:

向容器中注冊實現contract接口的對象。
構造函數參數類型指定為contract接口類,框架會自動找到符合條件的對象。
那么再來說說contract的好處。

松耦合

官網給了一個例子解釋什么是緊耦合以及Contract接口為何能夠松耦合。

先來看看緊耦合的代碼:

 

復制代碼代碼如下:

<?php namespace App/Orders;
class Repository {
    /**
     * The cache.
     */
    protected $cache;
    /**
     * Create a new repository instance.
     *
     * @param  /SomePackage/Cache/Memcached  $cache
     * @return void
     */
    public function __construct(/SomePackage/Cache/Memcached $cache)
    {
        $this->cache = $cache;
    }
    /**
     * Retrieve an Order by ID.
     *
     * @param  int  $id
     * @return Order
     */
    public function find($id)
    {
        if ($this->cache->has($id))
        {
            //
        }
    }
}

 

可以看到構造函數中注入了一個詳細的緩存實現 /SomePackage/Cache/Memcached ,如果換Redis作為緩存服務器或者更改了api方法,就需要修改,而如果項目很大,你不知道還有多少地方需要修改。

那么,Contract接口是如何解決這個問題的?請看代碼:

 

復制代碼代碼如下:

<?php namespace App/Orders;
use Illuminate/Contracts/Cache/Repository as Cache;
class Repository {
    /**
     * Create a new repository instance.
     *
     * @param  Cache  $cache
     * @return void
     */
    public function __construct(Cache $cache)
    {
        $this->cache = $cache;
    }
}

 

注意,緩存實現我們使用了一個接口,也就是contract,Illuminate/Contracts/Cache/Repository,因為它只是接口,不需要關心背后是memcache還是redis。

簡單性

如果所有服務都使用接口定義,就可以很簡單的決定一個服務需要的功能,更加容易維護和擴展,并且contract接口還能看作一個簡潔的文檔便于閱讀。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩精品高清在线| 国产91在线播放九色快色| 亚洲第一免费播放区| 日韩精品久久久久| 97国产精品久久| 精品久久久久久久久国产字幕| 亚洲欧美激情视频| 欧美中文字幕视频| 中文字幕国内精品| 久久精视频免费在线久久完整在线看| 国产一区二区三区三区在线观看| 国产日韩欧美在线视频观看| 少妇高潮 亚洲精品| 久久久这里只有精品视频| 精品久久久久久中文字幕一区奶水| 国产视频福利一区| 最新亚洲国产精品| 91麻豆桃色免费看| 57pao精品| 亚洲电影免费观看高清完整版在线观看| 美女福利精品视频| 日韩在线国产精品| 亚洲欧洲第一视频| 亚洲天堂免费在线| 亚洲性无码av在线| 亚洲电影免费观看高清完整版| 亚洲成人教育av| 欧美高清视频在线播放| 黑人精品xxx一区一二区| 亚洲а∨天堂久久精品9966| 日韩毛片在线观看| 欧美一级淫片aaaaaaa视频| 91禁外国网站| 国产91热爆ts人妖在线| 亚洲欧美日韩精品久久| 97视频网站入口| 欧美一级大片在线免费观看| 亚洲电影在线看| 这里只有精品丝袜| 久久亚洲精品成人| 成人黄色在线免费| 欧美性生活大片免费观看网址| 亚洲图片制服诱惑| 黑丝美女久久久| 亚洲国产天堂久久国产91| 91亚洲精品在线观看| 成人免费观看网址| 日韩欧美在线网址| 91久久精品一区| 久久国产精彩视频| 成人在线国产精品| 亚洲男女自偷自拍图片另类| 精品国产91乱高清在线观看| 色噜噜亚洲精品中文字幕| 亚洲人高潮女人毛茸茸| 中文字幕日韩欧美精品在线观看| 欧美在线视频网| 亚洲欧美日韩天堂一区二区| 亚洲无av在线中文字幕| 欧美高清一级大片| 亚洲精品av在线播放| 国产日本欧美一区二区三区在线| 国产精品久久久久久超碰| 国产精品99久久久久久久久久久久| 亚洲成人在线视频播放| 久久久久久香蕉网| 欧美美女操人视频| 韩国三级日本三级少妇99| 欧美性色视频在线| 精品福利在线看| 欧美日韩国产丝袜另类| 久久精品夜夜夜夜夜久久| 国产丝袜一区二区| 欧美午夜www高清视频| 黑人巨大精品欧美一区免费视频| 国产区亚洲区欧美区| 国产精品高潮呻吟久久av无限| 日韩三级影视基地| 日韩精品免费在线播放| 国产成人自拍视频在线观看| 97在线观看免费| 成人黄色av网站| 亚洲视频欧美视频| 国产91久久婷婷一区二区| 欧美另类极品videosbest最新版本| 成人夜晚看av| 欧美高清不卡在线| 亚洲激情成人网| 另类少妇人与禽zozz0性伦| 国产精品电影观看| 欧美裸体xxxx极品少妇软件| 亚洲天天在线日亚洲洲精| 久久久久国产精品一区| 亚洲自拍高清视频网站| 国产成人在线视频| 国产精品福利在线| 欧美日韩午夜视频在线观看| 亚洲日本中文字幕免费在线不卡| 欧美精品久久久久久久免费观看| 色多多国产成人永久免费网站| 欧美性xxxx在线播放| 国产在线999| 精品一区二区电影| 亚洲影视九九影院在线观看| 日韩精品高清在线| 亚洲免费av电影| 欧美激情精品久久久久久蜜臀| 国外成人免费在线播放| 色偷偷偷亚洲综合网另类| 亚洲精品电影网在线观看| 国产欧美精品在线播放| 欧美成人免费全部| 亚洲天堂av在线播放| 亚洲精品一区久久久久久| 91精品国产高清久久久久久久久| 国产精品69精品一区二区三区| 亚洲一区二区三区乱码aⅴ| 亚洲电影免费观看| 亚洲精品美女网站| 日韩在线视频网站| 亚洲精品综合久久中文字幕| 亚洲第一男人av| 精品中文视频在线| 国产精品一二三在线| 亚洲精品99久久久久中文字幕| 在线a欧美视频| 91av在线免费观看视频| 91在线高清免费观看| 97久久久免费福利网址| 亚洲成人精品视频| 92裸体在线视频网站| 亚洲第一中文字幕| 国产精品 欧美在线| 久久av红桃一区二区小说| 庆余年2免费日韩剧观看大牛| 国产视频精品自拍| 成人黄色免费片| 亚洲精品国产精品自产a区红杏吧| 91po在线观看91精品国产性色| 亚洲欧美日韩一区二区在线| 欧美成人免费在线视频| 欧美性猛交xxxx| 亚洲自拍另类欧美丝袜| 91视频8mav| 亚洲91精品在线观看| 欧美乱大交xxxxx| 欧美日韩视频免费播放| 夜色77av精品影院| 亚洲毛片在线观看| 精品无人区乱码1区2区3区在线| 九九热最新视频//这里只有精品| 久久久久久久久91| 国产成人综合亚洲| 国产精品美乳一区二区免费| 91经典在线视频| 4p变态网欧美系列| 亚洲精品www久久久久久广东| 在线观看欧美视频| 久久久久久久97| 国模精品一区二区三区色天香| 在线观看欧美成人| 亚洲日韩中文字幕在线播放| 国产精品久久久久久久久免费| 久久99热精品这里久久精品|