thinkphp6系统服务的定义和使用方法

thinkphp6系统服务的定义和使用方法

系统服务

系统服务的概念是指在执行框架的某些组件或者功能的时候需要依赖的一些基础服务,服务类通常可以继承系统的think\Service类,但并不强制(如果继承think\Service的话可以直接调用this->app获取应用实例)。

你可以在系统服务中注册一个对象到容器,或者对某些对象进行相关的依赖注入。由于系统服务的执行优先级问题,可以确保相关组件在执行的时候已经完成相关依赖注入。

服务定义

可以通过命令行生成一个服务类:

php think make:service FileSystemService

在这里插入图片描述
在这里插入图片描述
FileSystemService.php 服务类内容

<?php

namespace app\service;

use think\Service;

class FileSystemService  extends Service
{
    public function register()
    {
    	//手动修改的
    	echo 'FileSystemService-register()';
    }

    public function boot()
    {
  		 //手动修改的
        echo 'FileSystemService-boot()';
    }
}


系统服务类最常用的两个空方法:register和boot方法。

注册方法

register方法通常用于注册系统服务,也就是将服务绑定到容器中,例如:

<?php
namespace app\admin\service;

use my\util\FileSystem;

class FileSystemService extends Service
{
    public function register()
    {
        $this->app->bind('file_system', FileSystem::class);
    }
}


register方法不需要任何的参数,如果你只是简单的绑定容器对象的话,可以直接使用bind属性。

<?php
namespace app\service;

use my\util\FileSystem;

class FileSystemService extends Service
{
    public $bind = [
        'file_system'    =>    FileSystem::class,
    ];
}


启动方法

boot方法是在所有的系统服务注册完成之后调用,用于定义启动某个系统服务之前需要做的操作。例如:

<?php
namespace think\captcha;

use think\Route;
use think\Service;
use think\Validate;

class CaptchaService extends Service
{
    public function boot(Route $route)
    {
        $route->get('captcha/[:config]', "\\think\\captcha\\CaptchaController@index");

        Validate::maker(function ($validate) {
            $validate->extend('captcha', function ($value) {
                return captcha_check($value);
            }, ':attribute错误!');
        });
    }
}


boot方法支持依赖注入,你可以直接使用其它的依赖服务。

服务注册

定义好系统服务后,你还需要注册服务到你的应用实例中。
可以在应用的全局公共文件service.php中定义需要注册的系统服务,系统会自动完成注册以及启动。例如:

<?php

return [
    'app\service\FileSystemService',
];

在这里插入图片描述
浏览器中访问:
则会默认加载服务器中的两个方法并打印对应的内容
在这里插入图片描述

如果你需要在你的扩展中注册系统服务,首先在扩展中增加一个服务类,然后在扩展的composer.json文件中增加如下定义:

"extra": {
    "think": {
        "services": [
            "think\\captcha\\CaptchaService"
        ]
    }
},


在安装扩展后会系统会自动执行service:discover指令用于生成服务列表,并在系统初始化过程中自动注册。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值