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实际上是一个工厂,它为服务提供了驱动管理功能。
Laravel中的很多组件都使用了Manager,如:Auth
、Cache
、Log
、Notification
、Queue
、Redis
等等,每个组件都有一个xxxManager
的管理器。我们可以通过这个管理器扩展服务。
比如,如果我们想让Cache
服务支持RedisCache
驱动,那么我们可以给Cache
服务扩展一个redis
驱动:
Cache::extend('redis', function(){
return new RedisCache();
});
这时候,Cache
服务就支持redis
这个驱动了。现在,找到config/cache.php
,把default
选项的值改成redis
。这时候我们再用Cache
服务时,就会使用RedisCache
驱动来使用缓存。
有些情况下,我们需要给一个类动态增加几个方法,Macro
或者Mixin
很好的解决了这个问题。
在Laravel底层,有一个名为Macroable
的Trait
,凡是引入了Macroable
的类,都支持Macro
和Mixin
的方式扩展,比如Request
、Response
、SessionGuard
、View
、Translator
等等。
Macroable
提供了两个方法,macro
和mixin
,macro
方法可以给类增加一个方法,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分享:https://www.cdcxhl.com/news19/298419.html
成都网站建设公司_创新互联,为您提供云服务器、企业网站制作、移动网站建设、品牌网站制作、品牌网站设计、软件开发
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联
猜你还喜欢下面的内容