中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

創(chuàng)新互聯(lián)教你如何擴(kuò)展Laravel常用方法

2023-12-03    分類: 網(wǎng)站建設(shè)

注冊(cè)服務(wù)

向容器中注冊(cè)服務(wù)

// 綁定服務(wù)
$container->bind('log', function(){
   return new Log();
});
// 綁定單例服務(wù)
$container->singleton('log', function(){
   return new Log();
});

擴(kuò)展綁定

擴(kuò)展已有服務(wù)

$container->extend('log', function(Log $log){
   return new RedisLog($log);
});

Manager

Manager實(shí)際上是一個(gè)工廠,它為服務(wù)提供了驅(qū)動(dòng)管理功能。

Laravel中的很多組件都使用了Manager,如:AuthCache、Log、Notification、Queue、Redis等等,每個(gè)組件都有一個(gè)xxxManager的管理器。我們可以通過(guò)這個(gè)管理器擴(kuò)展服務(wù)。

比如,如果我們想讓Cache服務(wù)支持RedisCache驅(qū)動(dòng),那么我們可以給Cache服務(wù)擴(kuò)展一個(gè)redis驅(qū)動(dòng):

Cache::extend('redis', function(){
   return new RedisCache();
});

這時(shí)候,Cache服務(wù)就支持redis這個(gè)驅(qū)動(dòng)了?,F(xiàn)在,找到config/cache.php,把default選項(xiàng)的值改成redis。這時(shí)候我們?cè)儆?code style="margin: 0px 3px; padding: 3px 5px; max-width: 100%; box-sizing: border-box; overflow-wrap: break-word !important; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 11.7px; color: rgb(199, 37, 78); background-color: rgb(241, 241, 241); border-radius: 3px; display: inline-block;">Cache服務(wù)時(shí),就會(huì)使用RedisCache驅(qū)動(dòng)來(lái)使用緩存。

Macro和Mixin

有些情況下,我們需要給一個(gè)類動(dòng)態(tài)增加幾個(gè)方法,Macro或者Mixin很好的解決了這個(gè)問(wèn)題。

在Laravel底層,有一個(gè)名為MacroableTrait,凡是引入了Macroable的類,都支持MacroMixin的方式擴(kuò)展,比如Request、Response、SessionGuardView、Translator等等。

Macroable提供了兩個(gè)方法,macromixin,macro方法可以給類增加一個(gè)方法,mixin是把一個(gè)類中的方法混合到Macroable類中。

舉個(gè)例子,比如我們要給Request類增加兩個(gè)方法。

使用macro方法時(shí):

Request::macro('getContentType', function(){
   // 函數(shù)內(nèi)的$this會(huì)指向Request對(duì)象
   return $this->headers->get('content-type');
});
Request::macro('hasField', function(){
    return !is_null($this->get($name));
});

$contentType = Request::getContentstType();
$haspassword = Request::hasField('password');

使用mixin方法時(shí):

class MixinRequest{

   public function getContentType(){
       // 方法內(nèi)必須返回一個(gè)函數(shù)
       return function(){
           return $this->headers->get('content-type');
       };
   }

   public function hasField(){
       return function($name){
            return !is_null($this->get($name));
       };
   }
}

Request::mixin(new MixinRequest());

$contentType = Request::getContentType();
$haspassword = Request::hasField('password');

網(wǎng)頁(yè)標(biāo)題:創(chuàng)新互聯(lián)教你如何擴(kuò)展Laravel常用方法
URL分享:http://m.rwnh.cn/news19/298419.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、企業(yè)網(wǎng)站制作、移動(dòng)網(wǎng)站建設(shè)、品牌網(wǎng)站制作、品牌網(wǎng)站設(shè)計(jì)軟件開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)
屯门区| 清涧县| 广昌县| 横山县| 无极县| 名山县| 张掖市| 洞头县| 盈江县| 兴安县| 驻马店市| 雷波县| 图片| 九龙坡区| 章丘市| 双峰县| 寿阳县| 武平县| 万山特区| 神池县| 兴海县| 长岭县| 莱西市| 共和县| 浠水县| 营山县| 通许县| 长乐市| 铁岭县| 琼海市| 高邮市| 昌黎县| 清原| 徐汇区| 尤溪县| 商丘市| 滦南县| 彩票| 盐池县| 东兰县| 鹤壁市|