tp5.1 在子類控制器中獲取父類渲染到模板的變量


情況如下:

為了方便統一公共類型模板變量的賦值,我們一般會定義個基類,這個基類會渲染一些子類都會用到的模板變量。

如: 定義一個前置方法,從session中取出uid,並查詢渲染到模板變量

<?php

namespace app\common\controller;

use app\common\model\UserModel;
use think\Controller;

class UserBase extends Controller
{
    protected $beforeActionList = [
        'init',
    ];

    public function init(){
        $uid = session('user_id');
        if(!isset($uid) || empty($uid)){
            return json(['status' => 500, 'msg' => 'uid為空']);
        }
        $user=UserModel::get($uid);
        if($user){
            $this->assign([
                'user' => $user,
            ]);
        }
    }

    protected function successJson($msg = ''){
        return json(['status'=>200,'msg'=>$msg]);
    }

    protected function errorJson($msg = ''){
        return json(['status'=>500,'msg'=>$msg]);
    }
}

那如果子類控制器繼承后,想判斷父類渲染的模板變量,是否存在或者某個值是否為多少,怎么判斷,查找tp源碼。可以找到

image-20200623113621802

其實有方法可以獲取的

/**
* 取得模板顯示變量的值
* @access protected
* @param  string $name 模板變量
* @return mixed
*/
public function __get($name)
{
	return $this->data[$name];
}

/**
* 檢測模板變量是否設置
* @access public
* @param  string $name 模板變量名
* @return bool
*/
public function __isset($name)
{
	return isset($this->data[$name]);
}

如在子類控制器里判斷模板變量是否存在

public function index(){
    dump($this->view->__isset('mediaList'));
    dump($this->view->__isset('user'));
    dump($this->view->__isset('test'));
    return view();
}

image-20200623114810664


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM