天天看点

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自定义基础控制器类及其继承使用简明示例

问虎网络