如何扩展Laravel

栏目: 编程语言 · PHP · 发布时间: 6年前

内容简介:向容器中注册服务扩展已有服务Manager实际上是一个工厂,它为服务提供了驱动管理功能。

注册服务

向容器中注册服务

// 绑定服务
$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');

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

3D打印

3D打印

[美]胡迪•利普森,梅尔芭•库曼 / 赛迪研究院专家组 / 中信出版社 / 2013-4 / 49.00元

《3D打印:从想象到现实》内容简介:你需要一把功能强大的锤子?你需要一双精致无比的鞋子?你需要给孩子准备奇异的玩具?你需要一顿精美的晚餐?只管打印出来就行了。《3D打印:从想象到现实》带你走进3D打印的世界,认识一下当下这个最酷的东西——它将从想象变成现实,并带来一场深刻的社会革命。 书中讲述了3D打印技术的突破性发展,以及3D打印技术将如何应用在学校、厨房、医院等场所的。《3D打印:从想象......一起来看看 《3D打印》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具