cxhxy/app/applet/controller/Controller.php
2023-11-21 15:14:59 +08:00

181 lines
6.4 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace app\applet\controller;
use think\facade\View;
use think\facade\Session;
use app\applet\model\Setting as SettingModel;
use think\facade\Config;
/**
* 后台控制器基类
*/
class Controller extends \app\BaseController
{
protected $user; // 用户登录信息
protected $user_id; //商户id
protected $applet;
protected $applet_id;
protected $app_type; //小程序绑定模板类型
protected $controller = ''; // 当前控制器名称
protected $action = ''; // 当前方法名称
protected $routeUri = ''; // 当前路由uri
protected $group = ''; // 当前路由:分组名称
/* 登录验证白名单 */
protected $allowAllAction = [];
/**
* 后台初始化
*/
public function initialize()
{
$this->user = Session::get('hema_applet');// 获取登录信息
$this->getRouteInfo();// 当前路由信息
// 验证当前请求是否在白名单
if (in_array($this->routeUri, $this->allowAllAction)) {
return true;
}
// 验证登录状态
if (empty($this->user)
|| (int)$this->user['is_login'] !== 1
|| !isset($this->user['applet'])
|| empty($this->user['applet'])
) {
return redirect('/user')->send();
}
$this->user_id = $this->user['user']['user_id'];//商户id
$this->applet = $this->user['applet'];//应用
$this->applet_id = $this->user['applet']['applet_id'];//应用ID
$this->app_type = $this->user['applet']['app_type'];//应用ID
$this->layout();
}
/**
* 全局layout模板输出
*/
private function layout()
{
// 输出到view
View::assign([
'base_url' => base_url(), // 当前站点域名
'web' => SettingModel::getItem('web',0), //站点设置
'store_url' => '/applet/', // 后台模块url
'group' => $this->group,
'menus' => $this->menus(), // 后台菜单
'user' => $this->user, // 登录信息
'applet_id' => $this->applet_id, // 小程序ID
'user_id' => $this->user_id, // 小程序ID
'version' => Config::get('app.hemaphp.version'),
]);
}
/**
* 获取支付宝小程序配置信息
*/
protected function getAlipay()
{
return SettingModel::getItem('alipay',$this->applet_id);
}
/**
* 解析当前路由参数 (分组名称、控制器名称、方法名)
*/
protected function getRouteInfo()
{
// 控制器名称
$this->controller = uncamelize($this->request->controller());
// 方法名称
$this->action = $this->request->action();
// 控制器分组 (用于定义所属模块)
$group = strstr($this->controller, '.', true);
$this->group = $group !== false ? $group : $this->controller;
// 当前uri
$this->routeUri = "{$this->controller}/$this->action";
}
/**
* 菜单配置
*/
private function menus()
{
foreach ($data = Config('menus') as $group => $first) {
$data[$group]['active'] = $group === $this->group;
//$data[0]['active']
// 遍历:二级菜单
if (isset($first['submenu'])) {
foreach ($first['submenu'] as $secondKey => $second) {
// 二级菜单所有uri
$secondUris = [];
if (isset($second['submenu'])) {
// 遍历:三级菜单
foreach ($second['submenu'] as $thirdKey => $third) {
$thirdUris = [];
if (isset($third['uris'])) {
$secondUris = array_merge($secondUris, $third['uris']);
$thirdUris = array_merge($thirdUris, $third['uris']);
} else {
$secondUris[] = $third['index'];
$thirdUris[] = $third['index'];
}
$data[$group]['submenu'][$secondKey]['submenu'][$thirdKey]['active'] = in_array($this->routeUri, $thirdUris);
$data[$group]['submenu'][$secondKey]['active'] = in_array($this->routeUri, $secondUris);
}
} else {
if (isset($second['uris']))
$secondUris = array_merge($secondUris, $second['uris']);
else
$secondUris[] = $second['index'];
}
// 二级菜单active
!isset($data[$group]['submenu'][$secondKey]['active'])
&& $data[$group]['submenu'][$secondKey]['active'] = in_array($this->routeUri, $secondUris);
}
}
}
return $data;
}
/**
* 返回封装后的 API 数据到客户端
*/
protected function renderJson($code = 1, string $msg = '', string $url = '', array $data = [])
{
return json(compact('code', 'msg', 'url', 'data'));
}
/**
* 返回操作成功json
*/
protected function renderSuccess(string $msg = 'success', string $url = '', array $data = [])
{
return $this->renderJson(1, $msg, $url, $data);
}
/**
* 返回操作失败json
*/
protected function renderError(string $msg = 'error', string $url = '', array $data = [])
{
return $this->renderJson(0, $msg, $url, $data);
}
/**
* 获取post数据 (数组)
* @param $key
* @return mixed
*/
protected function postData($key = null)
{
return $this->request->post(empty($key) ? '' : "{$key}/a");
}
/**
* 获取post数据 (数组)
* @param $key
* @return mixed
*/
protected function postForm($key = 'form')
{
return $this->postData($key);
}
/**
* 获取post数据 (数组)
* @param $key
* @return mixed
*/
protected function getData($key = null)
{
return $this->request->get(is_null($key) ? '' : $key);
}
}