如何扩展Laravel

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

内容简介:向容器中注册服务扩展已有服务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');

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

查看所有标签

猜你喜欢:

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

深入理解LINUX内核(第三版)

深入理解LINUX内核(第三版)

(美)博韦,西斯特 / 陈莉君;张琼声;张宏伟 / 中国电力出版社 / 2007-10-01 / 98.00元

为了彻底理解是什么使得Linux能正常运行以及其为何能在各种不同的系统中运行良好,你需要深入研究内核最本质的部分。内核处理CPU与外界间的所有交互,并且决定哪些程序将以什么顺序共享处理器时间。它如此有效地管理有限的内存,以至成百上千的进程能高效地共享系统。它熟练地统筹数据传输,这样CPU 不用为等待速度相对较慢的硬盘而消耗比正常耗时更长的时间。 《深入理解Linux内核,第三版》指导你对内核......一起来看看 《深入理解LINUX内核(第三版)》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

URL 编码/解码
URL 编码/解码

URL 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器