thinkphp6 关于服务的实现

自定义系统类
1、定义被服务的对象类

<?php
namespace app\common;

/**
 * 自定义服务类
 */
class MyServiceDemo
{
	//定义一个静态成员变量
	protected static $myStaticVar = '123';
	//设置该变量的值
	public static function setVar($value)
	{
		self::$myStaticVar = $value;
	}
	//用于显示该变量
	public function showVar()
	{
		var_dump(self::$myStaticVar);
	}

}

2、定义服务提供者
在项目根目录,命令行执行php think make:service MyService ,将会生成一个app\service\MyService.php文件,在其中写入代码。

<?php
declare (strict_types = 1);

namespace app\service;
use think\Service;
use app\common\MyServiceDemo;

class MyService  extends \think\Service
{

    /**
     * 注册服务
     *
     * @return mixed
     */
    public function register()
    {
    	//将绑定标识到对应的类
    	$this->app->bind('my_service',MyServiceDemo::class);
    }

    
    /**
     * 执行服务
     *
     * @return mixed
     */
    public function boot()
    {
        //将被服务类的一个静态变量设置成另外一个值
        MyServiceDemo::setVar('abc');
    }
}

3、配置系统服务
在app\service.php文件如果没有就创建,写入

<?php

use app\AppService;

// 系统服务定义文件
// 服务在完成全局初始化之后执行
return [
    AppService::class, //这个可以不用写入
    '\app\service\MyService'
];

4、在控制器调用
创建一个控制器文件,写入代码:

<?php
namespace app\controller;

use app\BaseController;
use app\common\MyServiceDemo;

class About extends BaseController
{
    public function index(MyServiceDemo $demo)
    {
      //在这里测试服务
      //因为在服务提供类app\service\MyService的boot方法中设置了$myStaticVar='abc',所以这里输出‘abc'
      //
     echo  $demo->showVar();

     }

    public function hello($name = 'ThinkPHP6')
    {
        return 'hello,' . $name;
    }
}

//执行原理和分析见代码注释。另外说说自定义的服务配置是怎么加载的:App::initialize()中调用了

1 if (is_file($appPath . 'service.php')) {
2     $services = include $appPath . 'service.php';
3     foreach ($services as $service) {
4         $this->register($service);
5     }
6 }

正是这里将我们定义的服务加载进来并注册。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ThinkPHP6 中实现插件库可以通过以下步骤: 1. 创建插件库 在你的应用程序中创建一个新目录,例如 `plugins`,并在该目录下创建一个插件目录,例如 `demo`。 2. 创建插件目录结构 在 `demo` 目录下创建如下目录结构: ``` demo/ ├── config/ │ └── demo.php ├── controller/ │ └── Demo.php ├── lang/ │ ├── en-us.php │ └── zh-cn.php ├── middleware/ │ └── Demo.php ├── route/ │ └── demo.php ├── public/ │ ├── css/ │ ├── js/ │ └── images/ ├── service/ │ └── Demo.php ├── view/ │ ├── index/ │ │ └── index.html │ └── layout/ │ └── base.html ├── composer.json └── README.md ``` 这里以 `demo` 插件为例,其中包含了控制器、中间件、路由、服务等常规目录和文件。 3. 配置插件 在应用程序的 `config/plugin.php` 文件中配置插件,例如: ``` return [ 'demo' => [ 'enable' => true, 'path' => __DIR__ . '/../plugins/demo/', ], ]; ``` 启用插件并设置插件的路径。 4. 加载插件 在应用程序的 `start.php` 文件中加载插件: ``` // 加载插件 \think\Loader::addNamespace('demo', __DIR__ . '/../plugins/demo/'); ``` 这里将 `demo` 插件添加到了命名空间中。 5. 访问插件 现在可以通过 `http://yourdomain.com/demo` 访问 `demo` 插件的控制器方法了。 以上就是在 ThinkPHP6 中实现插件库的基本步骤,你可以根据自己的需求进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值