創新互聯教你如何擴展Laravel常用方法

2023-12-03    分類: 網站建設

注冊服務

向容器中注冊服務

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

擴展綁定

擴展已有服務

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

Manager

Manager實際上是一個工廠,它為服務提供了驅動管理功能。

Laravel中的很多組件都使用了Manager,如:AuthCacheLogNotificationQueueRedis等等,每個組件都有一個xxxManager的管理器。我們可以通過這個管理器擴展服務。

比如,如果我們想讓Cache服務支持RedisCache驅動,那么我們可以給Cache服務擴展一個redis驅動:

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

這時候,Cache服務就支持redis這個驅動了。現在,找到config/cache.php,把default選項的值改成redis。這時候我們再用Cache服務時,就會使用RedisCache驅動來使用緩存。

Macro和Mixin

有些情況下,我們需要給一個類動態增加幾個方法,Macro或者Mixin很好的解決了這個問題。

在Laravel底層,有一個名為MacroableTrait,凡是引入了Macroable的類,都支持MacroMixin的方式擴展,比如RequestResponseSessionGuardViewTranslator等等。

Macroable提供了兩個方法,macromixinmacro方法可以給類增加一個方法,mixin是把一個類中的方法混合到Macroable類中。

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

使用macro方法時:

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

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

使用mixin方法時:

class MixinRequest{

   public function getContentType(){
       // 方法內必須返回一個函數
       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');

網頁標題:創新互聯教你如何擴展Laravel常用方法
URL分享:http://m.kartarina.com/news19/298419.html

成都網站建設公司_創新互聯,為您提供云服務器企業網站制作移動網站建設品牌網站制作品牌網站設計軟件開發

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

商城網站建設
主站蜘蛛池模板: 精品深夜AV无码一区二区| 亚洲AV无码一区二三区 | 亚洲中文无码亚洲人成影院| 亚洲AV无码乱码麻豆精品国产| 亚洲国产成人精品无码区在线网站| 高清无码v视频日本www| 久久精品无码一区二区app| 久久久久亚洲AV片无码下载蜜桃| 国产精品免费看久久久无码| 亚洲VA中文字幕无码毛片 | 亚洲中文字幕无码中文字在线 | 国产aⅴ无码专区亚洲av| 一区二区三区无码被窝影院 | av无码久久久久久不卡网站| 国产免费黄色无码视频| 亚洲精品无码av片| 亚洲精品无码久久千人斩| 天天看高清无码一区二区三区| 无码播放一区二区三区| 无码人妻AV免费一区二区三区| 日韩精品无码一区二区三区四区 | 日韩人妻无码免费视频一区二区三区 | 国产精品无码AV天天爽播放器| 久久午夜无码鲁丝片秋霞 | 久久无码一区二区三区少妇| 丰满亚洲大尺度无码无码专线 | 国产av激情无码久久| 亚洲av纯肉无码精品动漫| 亚洲熟妇无码久久精品| 日韩乱码人妻无码中文字幕 | 亚洲成a∨人片在无码2023| 无码人妻精品一区二区三| 亚洲国产AV无码专区亚洲AV | 国产精品无码久久综合| 成人无码a级毛片免费| 免费无码作爱视频| 天堂Aⅴ无码一区二区三区| 精品久久久久久无码人妻蜜桃 | 十八禁无码免费网站| 熟妇人妻中文字幕无码老熟妇| 日韩精品无码免费一区二区三区|