如何扩展Laravel

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

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

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

查看所有标签

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

计算机算法设计与分析

计算机算法设计与分析

王晓东 / 电子工业出版社 / 2007-5 / 29.50元

《计算机算法设计与分析(第3版)》为普通高等教育“十一五”国家级规划教材,是计算机专业核心课程“算法设计与分析”教材。全书以算法设计策略为知识单元,系统介绍计算机算法的设计方法与分析技巧。主要内容包括:算法概述、递归与分治策略、动态规划、贪心算法、回溯法、分支限界法、随机化算法、线性规划与网络流、NP完全性理论与近似算法等。书中既涉及经典与实用算法及实例分析,又包括算法热点领域追踪。 为突出......一起来看看 《计算机算法设计与分析》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

在线进制转换器
在线进制转换器

各进制数互转换器

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具