步驟一、
我們先在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,領取馬雲的紅包,使用餘額寶消費可抵扣,大家好,才是真的好。
更多精彩内容請掃碼關注:

問虎網絡