【vue2.7.16系列】手把手教你搭建后台系统__provider绑定类标识(11)
依赖注入的类统一由容器进行管理,大多数情况下是在自动绑定并且实例化的。不过你可以随时进行手动绑定类到容器中(通常是在服务类的register方法中进行绑定),支持多种绑定方式。
json类
之前我们在登录接口是这样返回数据的
return json($this->services->login($account, $password, 'admin'));
因为还会有无数个接口返回,我们有必要对其封装一下。
在xkadmin/uitls
目录下新建Json.php
工具类。内容如下:
<?phpnamespace xkadmin\utils;use think\Response;
use think\facade\Lang;
use think\facade\Config;/*** Json 输出工具类* Class Json* @package xkadmin\utils*/
class Json
{private int $code = 200;/*** 设置响应状态码* @param int $code* @return self*/public function code(int $code): self{$this->code = $code;return $this;}/*** 生成 JSON 响应* @param int $status 状态码* @param string $msg 消息* @param array|null $data 数据* @return Response*/public function make(int $status, string $msg,?array $data = null): Response{$request = app()->request;$res = ['status' => $status, 'msg' => $msg];if (!is_null($data)) {$res['data'] = $data;}// 处理多语言消息if ($res['msg'] &&!is_numeric($res['msg'])) {$range = $request->get('lang')?? $request->cookie(Config::get('lang.cookie_var'));if ($range && $range!== 'deleted') {$res['msg'] = Lang::get($res['msg'], [], $range);} else {$res['msg'] = Lang::get($res['msg'], [], 'zh-cn');}}return Response::create($res, 'json', $this->code);}/*** 生成成功响应* @param string $msg 消息* @param array|null $data 数据* @return Response*/public function success($msg = 'ok',?array $data = null): Response{if (is_array($msg)) {$data = $msg;$msg = 'ok';}return $this->make(200, $msg, $data);}/*** 别名方法 successful* @param mixed...$args 参数* @return Response*/public function successful(...$args): Response{return $this->success(...$args);}/*** 生成失败响应* @param string $msg 消息* @param array|null $data 数据* @return Response*/public function fail($msg = 'fail',?array $data = null): Response{if (is_array($msg)) {$data = $msg;$msg = 'fail';}return $this->make(400, $msg, $data);}/*** 自定义状态响应* @param string $status 状态字符串* @param string|array $msg 消息或数据数组* @param array $result 结果数据* @return Response*/public function status($status, $msg, $result = []): Response{$status = strtoupper($status);if (is_array($msg)) {$result = $msg;$msg = 'ok';}return $this->success($msg, compact('status', 'result'));}
}
绑定JSON类到容器中
在app/providor.php
文件中,绑定Json
类。
<?php
use app\Request;
use app\ExceptionHandle;
use xkadmin\utils\Json;// 容器Provider定义文件
return ['json' => Json::class,'think\Request' => Request::class,'think\exception\Handle' => ExceptionHandle::class,
];
封装共用返回json方法
在xkadmin/basic/BaseController.php
中,增加下面两个方法
/*** 成功返回json数据* @access public* @param array $data 数据* @return array json信息*/
public function success($data)
{return app('json')->success($data);
}/*** 失败返回json数据* @access public* @param array $data 数据* @return array json信息*/
public function fail($data)
{return app('json')->fail($data);
}
调用
在login
控制器接口中返回数据,就可以用下面这种方式。
return $this->success($this->services->login($account, $password, 'admin'));
参考
- 容器和依赖注入