步骤一、
我们先在admin模块controller目录下创建并自定义一个基础控制器类,
它继承think的controller类:
<?php
namespace app\admin\controller;
use think\Controller;
use think\Db;
use think\Session;
class base extends Controller
{
/**
* 初始化方法,可以控制用户权限、获取菜单等等,只要是继承base类的其它业务类就不需要再重写
*/
protected function _initialize()
{
parent::_initialize();
//判断登陆状态:
if (Session::has('user')) {
if (!defined('US')) define('US', Session::get('user.user_name'));
//判断帐户状态,如帐号被禁用/删除,即时生效:
$user= Db::name('user')->where(['username' => US])->value('status');
if ($user== 2 || $user== -1) $this->error('没有权限');
//获取菜单:
$this->menu(US);
} else {
if (!defined('US')) define('US', 0);
$this->redirect('user/login');
}
}
/**
* 菜单获取方法
*/
protected function menu($user)
{
$menu = Db::name('menu')->where(['业务逻辑略过' => $user])->value('menu');
$this->assign('menu', $menu);
}
/**
* 订单详情获取方法
*/
protected function getOrderDetails($sn)
{
$Details = Db::name('ordersDetails')->where(['业务逻辑略过' => $sn])->select();
return $Details;
}
二、
然后在相同目录下创建Orders类继承base类,
其它继承base类的子类同样都可以使用base类的的getOrderDetails方法:
<?php
namespace app\admin\controller;
use think\Request;
/**
* 订单相关类
*/
class Orders extends base
{
//订单详情页:
public function details()
{
if (Request::instance()->get('sn')) {
$sn = Request::instance();
//获取订单基本信息,及订单商品信息:
$details = $this->getOrderDetails($sn->param()['sn']);
$this->assign('details', $details);
$this->assign('url', $sn->header()["referer"]);
$this->assign('title', '订单 | 订单详情');
return $this->fetch();
}
}
三、加需求:
此时如果我们有一个接口类也需要使用base类的getOrderDetails方法,
但是接口请求不是判断权限而是校验身份,也不需要获取菜单,怎么办呢?
方法如下:
<?php
namespace app\admin\controller;
use think\Request;
/**
* 订单信息接口类
*/
class OrdersApi extends base
{
protected $data = [];
protected function _initialize()
{
//parent::_initialize(); //将继承父类代码注释掉
//同样继承base类,但是不继承base类的构造函数,而是重写构造函数:
if (Request::instance()->post()) {
$this->data = Request::instance()->param();
$re = array('code' => '9', 'msg' => '身份校验失败,请核对');
if ('身份校验业务代码略过' != 'OK') {
echo json_encode($re);
exit;
}
} else {
$re= array('code' => '6', 'msg' => '非法访问');
echo json_encode($re);
exit;
}
}
//接收请求订单号,返回订单信息
public function returnOrderDetails()
{
//通过请求的订单号,使用base类的getOrderDetails方法查询订单信息:
$Details = $this->getOrderDetails($this->data['sn']);
$re = array('code' => '3', 'msg' => 'OK', 'data' => $Details);
$json_string = json_encode($re);
return $json_string;
}
如此文章对你有帮助,请打开支付宝搜索535149388,领取马云的红包,使用余额宝消费可抵扣,大家好,才是真的好。
更多精彩内容请扫码关注:

问虎网络