Constract 契约自定义

契约自定义使用

  • 在 app 目录下新建 Constracts 目录
  • 在 app/Constracts 目录下新建 TestConstract
<?php


namespace App\Contracts;


interface TestContract
{
    public function callMe($controller);
}
  • 在 app/Services 目录下创建 TestService
<?php


namespace App\Services;


use App\Contracts\TestContract;

class TestService implements TestContract
{

    public function callMe($controller)
    {
        dd('Call Me From TestServiceProvider In '.$controller);
    }
}
  • 生成服务提供者
php artisan make:provider TestServiceProvider
  • 在 TestServiceProvider 的 boot 方法中注册实现类
    public function boot()
    {
        //使用bind绑定实例到接口以便依赖注入
        $this->app->bind('App\Contracts\TestContract',function(){
            return new TestService();
        });
    }
  • 在 app/config/app.php 中添加服务提供者配置
 'providers' => [
 ...
 \App\Providers\TestServiceProvider::class,
 ...
 ]
  • 在控制器中使用
use App\Contracts\TestContract;

class TestController extends Controller
{
    protected $contract;
    public function __construct(TestContract $contract)
    {
        $this->contract = $contract;
    }

    public function index(Request $request){
        $this->contract->callMe('123');
    }
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
喜欢的话就点个赞吧!
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 4

小白请教:实现类的目录App\Services这个可以自定义吗?

2年前 评论
风吹过有夏天的味道 (楼主) 2年前
pndx

contracts 拼写错误了

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!