Laravel8.x服务容器的基本使用

作者: 温新

分类: 【Laravel】

阅读: 2853

时间: 2020-11-23 16:44:24

服务容器是Laravel的核心,而容器的使用需要与服务提供者的配合,本篇文件只记录最基本的使用,不涉及服务容器是什么,依赖注入又是什么。只在于快速上手使用容器与服务提供者。

下面有些目录并不是官方预定义的目录,需要手动添加,因此无法使用artisan快速生成。为了方面浏览与简单易懂,下面我将直接将步骤定死,当然了,这仅供参考。下面直接开始记录。

第一步:定义契约接口类

// App\Contracts 目录需要手动创建

<?php
namespace App\Contracts;

// 定义接口类
interface TestContract
{
	/**
	 * say
	 * @param  string $info 定义接收的信息
	 * @return [type]       [description]
	 */
    public function say($info):string; 
}

1)为了方面管理,定义一个契约目录,专门要来存放接口,将要实现的功能定义成接口,然后子类实现。

2)当然了,不这样使用也可以通过其它方法来实现服务容器与服务提供者的结合使用。

第二步:定义子类服务实现接口

// App\Services 目录需要手动创建

<?php
namespace App\Services;

use App\Contracts\TestContract;

// 实现接口
class TestService implements TestContract
{
	public function say($info):string
	{
		dd($info . '欢迎来到自如初博客,我是夕阳何处寻');
	}
}

第三步:创建服务提供者

php artisan make:provider TestServiceProvider

编辑生成的TestServiceProvider.php

<?php
namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use App\Services\TestService;

class TestServiceProvider extends ServiceProvider
{
    public function register()
    {
        // 将服务接口注绑定至服务容器
        $this->app->bind('App\Contracts\TestContract', function(){
            return new TestService();
        });
    }

    public function boot()
    {
    }
}

第四步:注册服务提供者

这一步需要在app/config/app.php文件中的providers数组中将服务提供者注册到应用中。

// app\config\app.php

<?php

    'providers' => [
		# 此处省略其它内容
        App\Providers\TestServiceProvider::class,
    ],

第五步:测试服务提供者

创建Test控制器用于测试

php artisan make:controller TestController

编写TestController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Contracts\TestContract;

class TestController extends Controller
{

	public function test(TestContract $test)
	{
		$test->say('www.ziruchu.com ');
	}
}

第六步:编写路由

// routes/web.php
<?php

use Illuminate\Support\Facades\Route;

//use App\Http\Controllers\IndexController;

Route::get('/', function () {
    return view('welcome');
});

Route::get('test', 'TestController@test');

第七步:访问

最后就能看到输出的内容:"www.ziruchu.com欢迎来到自如初博客,我是夕阳何处寻"。

2020-11-24

请登录后再评论