一. 几个概念(以下是从自定义):
服务提供者 :为相关服务容器提供统一绑定场所.
服务容器 :简单的说实现了某些功能的对象.
契约 :简单的说就是抽象类或接口,供服务容器去具体实里面的方法.
门面:服务容器对象的"静态"接口(别名).
几者的关系:
如果一个类(服务容器)没有基于任何接口(契约) 那么就没有必要将其绑定到容器。
事例如下
//自定义服务容器
<?php
namespace App\Services;
class UploadService
{
public function img()
{
echo '这里是定义上传图片的方法';
}
}
//使用
<?php
namespace App\Http\Controllers\Test;
use App\Services\UploadService;
class AdminController extends BaseController{
public function index(UploadService $img){
echo $img->img();
}
}
自定义门面
//定义服务容器
<?php
namespace App\Services;
class JsonMsgService{
public function Msg(){
echo '这里是测试';
}
}
//绑定
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use App\Services\JsonMsgService;
class JsonMsgServiceProvider extends ServiceProvider{
public function register() {
$this->app->singleton('JsonMsg',function(){
return new JsonMsgService;
});
}
}
//定义门面
<?php
namespace App\Facades;
use Illuminate\Support\Facades\Facade;
class JsonMsgFacade extends Facade{
protected static function getFacadeAccessor(){
return 'JsonMsg';
}
}
//配置文件config/app.php中注册门面
'providers' => [
App\Providers\JsonMsgServiceProvider::class,
'aliases' => [
'JsonMsg' => App\Facades\JsonMsgFacade::class,
//使用
use JsonMsg;
use App\Services\UploadService;
class AdminController extends BaseController{
public function index(UploadService $img){
//echo $img->img();
echo JsonMsg::Msg();
}