Skip to main content

09.laravel-契约

1 什么是契约?

什么是契约?为什么要用契约?契约能带来什么好处?
什么是契约? laravel是个基于DI(依赖注入)的单例框架,类的实例化交给容器内部来进行,而告知容器怎么去实例这个类,就是契约了。 为什么要用契约? 以及有什么好处呢? 如果类在容器中统一实例的话,那么在性能上,可以实现单例,从而高性能。在操作上,由于类的实例是都统一在容器中进行的, 那么就可以在适当的时机对类进修改从而影响整合应用,也就是OOP切面。

2 示例代码

2.1 订单服务类


<?php
namespace App\Http\Service;

use EasyWeChat\Factory;
use App\Model\{
CaseOrder as CaseOrderModel,
PayTimes as PayTimesModel
};
use App\Model\Cases as CasesModel;
use Illuminate\Support\Facades\Storage;

class CaseOrder extends Base
{
/**
* 分期表
*
*/
public function getPayTimesById($order_id)
{
$PayTimes = (new PayTimesModel())->where('order_id', $order_id)
->get()
->makeHidden(['created_at', 'updated_at', 'order_id']);
return $PayTimes->toArray();

}

}

2.2 声明依赖

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use App\Http\Service\{
CaseOrder as CaseOrderService
};

class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
// 契约注册 提示符 对应类
$this->app->bind(CaseOrderService::class, CaseOrderService::class);
}

/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
//
}
}

2.3 控制器使用

<?php

namespace App\Http\Controllers\Api;

use App\Http\Service\{
CaseOrder as CaseOrderService
};

class CaseOrderController extends Controller
{


/**
* 分期表
*
*/
public function payTimesIndex(CaseOrderService $CaseOrderService)
{
$pay_times_list = $CaseOrderService->getPayTimesById($Request->id);
return $this->responseSuccessData($pay_times_list);
}
}