天天看點

TP5自定義基礎控制器類及其繼承使用簡明示例

步驟一、

我們先在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,領取馬雲的紅包,使用餘額寶消費可抵扣,大家好,才是真的好。

更多精彩内容請掃碼關注:

TP5自定義基礎控制器類及其繼承使用簡明示例

問虎網絡