Day26 跟着官方文件学习Laravel-Service Provider

昨天我们说到 Service Container 是一个地方绑定你类别如何产生出来,或者是你想将 interface 绑定某个 class 来作出实例,我们需要一个地方来描述这个实例过程,我们可以打开 config/app.php 这个档案,里面有一个 providers 的 Array,里面存放 laravel 提供的 Service Provider,今天我们也可以自己定义一个 Service Provider。

我们就借用上篇文章定义的 Animal 来试试看。

我们创建一个Service Provider

php artisan make:provider AnimalServiceProvider

好接着打开 AnimalServiceProvider.php 我们要修改 register 这个方法

public function register()
    {
        $this->app->bind(Animal::class, function () {
            return new Dog();
        });
    }

然後将 AnimalServiceProvider 放到config/app.php 的 providers 里

App\Providers\AnimalServiceProvider::class,

接着试着使用它,创建一个 command 来试试

php artisan make:command Animals

修改 $signature 为 animal,并改写handle

public function handle(Animal $animal)
    {
        dd($animal->say());
        return 0;
    }

印出来会看到,汪汪,若要改成用Cat实作呢,我们可以改一下 Service Provider 的 register 试试看

public function register()
    {
        $this->app->bind(Animal::class, function () {
            return new Cat();
        });
    }

再次执行後会是 喵~

也可以使用 singleton 来绑定

public function register()
    {
        $this->app->singleton(Animal::class, function () {
            return new Cat();
        });
    }

若你希望你的 Provider 不要一开始就注册到Container,想等到需要用实在注册的话,可以实作 DeferrableProvider,这样他在需要时,才会进行注册

<?php

namespace App\Providers;

use App\Animal\Cat;
use App\Animal\Animal;
use Illuminate\Support\ServiceProvider;
use Illuminate\Contracts\Support\DeferrableProvider;

class AnimalServiceProvider extends ServiceProvider implements DeferrableProvider
{
    /**
     * Register services.
     *
     * @return void
     */
    public function register()
    {
        $this->app->bind(Animal::class, function () {
            return new Cat();
        });
    }

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

OK~今天就研究到这边,明天再来看生命周期。


<<:  浅谈网路爬虫

>>:  网页动起来-30天学会HTML+CSS,制作精美网站

Day21 切版笔记- 图文满版区块

铁人赛的前20天,把常常混淆的那些观念重新理解过一遍之後,後面的10天打算来练习切版,希望透过实际练...

awk - 4 常见处理案例

前3篇回顾 awk - 简介 Linux 制表好工具 awk-2 Regex搭配浅谈 awk-3 运...

GitHub Action 实作持续整合 - 以 ASP.NET Core 专案为例

接下来的两篇文章,会结合前面 GitHub Action 所学,实作持续整合与持续布署两个部分。因为...

Day 7 [Python ML] Machine Learning的处理流程

Step 1: 蒐集数据 要先将自己需要的数据下载好,并且确认资料格式而去做不同的处理 Step ...

[Tableau Public] day 2:认识 tableau public & 下载安装

日子来到了第二天,我们先去 tableau public 的官网看看吧! 注册帐号跟下载程序这两件事...