Laravel服务容器(继承与事件)
原创
©著作权归作者所有:来自51CTO博客作者廖圣平_的原创作品,请联系作者获取转载授权,否则将追究法律责任

前面写了容器的上下文绑定,接下去看下 继承与事件
在Laravel 框架中,有时需要修改 系统的基础文件,但是修改vender目录下的文件,肯定是不明智的选择,为了框架的扩展性,可以通过容器的继承或事件来修改或者覆盖需要修改的值。
比如我想设置db 的 setDefaultConnection
方法可以这样
$this->app->resolving('setDefaultConnection',function ($db,$app){
$db->setDefaultConnection('ConnectionName');
});
回到 比较实际的例子, 在控制器初始化一个数据
<?php
namespace App\Http\Controllers;
class Nut
{
public $express;
public $data;
public function __construct(\App\Contracts\Express $express)
{
$this->express = $express;
}
public function get()
{
return $this->data;
}
}
我们在原来的基础上新加了一个 data 属性,并输出。
在服务提供者就可以对 这个data 进行初始化了
容器事件
$this->app->resolving('setDefaultConnection',function ($db,$app){
$db->setDefaultConnection('ConnectionName');
});
容器继承
继承的方式和 事件有点像,但是需要返回对象
$this->app->extend('App\Http\Controllers\Nut', function ($service, $app) {
$service->data = 'hello extend';
return $service;
});
git add .
git commit -m 容器的继承与事件
git push
代码仓库