002thinkphp获取项目信息

Posted 陈三

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了002thinkphp获取项目信息相关的知识,希望对你有一定的参考价值。

先来介绍下Thinkphp获取URL的变量:

echo \'网站根目录地址:\'.__ROOT__.\'<br/>\';
echo \'当前项目(入口文件)地址:\'.__APP__.\'<br/>\';
echo \'当前分组地址:\'.__GROUP__.\'<br/>\';
echo \'当前模块地址:\'.__URL__.\'<br/>\';
echo \'当前操作地址:\'.__ACTION__.\'<br/>\';
echo \'当前 URL 地址:\'.__SELF__.\'<br/>\';
echo \'当前操作名称:\'.ACTION_NAME.\'<br/>\';
echo \'当前项目目录:\'.APP_PATH.\'<br/>\';
echo \'当前项目名称:\'.APP_NAME.\'<br/>\';


圈起的三个无法获取;

echo $_SERVER["REQUEST_SCHEME"].\'://\'.$_SERVER["SERVER_NAME"].\':\'.$_SERVER[\'SERVER_PORT\'].$_SERVER["REQUEST_URI"];

结果(模板页):http://localhost:80/ackonphp/index/loginOut.html
结果(操作名全称):http://localhost:80/ackonphp/home/index/testconn

 

echo $_SERVER[\'HTTP_HOST\'].\'<br/>\';
echo $_SERVER[\'SCRIPT_NAME\'].\'<br/>\';
echo $_SERVER[\'PATH_INFO\'].\'<br/>\';
echo $_SERVER[\'QUERY_STRING\'].\'<br/>\';
echo $_SERVER[\'PHP_SELF\'].\'<br/>\';

$_SERVER[\'QUERY_STRING\']无效;

 

==================================

下面正式介绍ThinkPHP拦截器功能

class AdminController extends Controller {
    /**
     * 后台控制器初始化
     */
    public function _initialize(){

        $this->isLogin();
    }

    public function isLogin(){
        /**
         *操作前进行拦截,session不存在则返回登录页
         *在Common模块/Conf/config.php配置不拦截的内容
         */
        $array=C(\'LOGIN_CHECK\');//不拦截的路径
        $url=__ACTION__;//当前路径
        if(!in_array($url, $array)){
            if(!session(\'loginUser\')){
                $this->display(\'/login\');
            }
        }
    }
    
    public function _empty(){
        try{
            if(method_exists($this,"actions")){
                //内容省略
            }else{
                throw new \\Think\\Exception("未定义动作类绑定");
            }
        }catch(Exception $e){
            send_http_status(\'404\');//action不存在或动作类不合法,抛出404
        }
    }
}

LOGIN_CHECK在config.php中进行指定

//拦截器,不拦截操作
\'LOGIN_CHECK\'=>array(
    __ROOT__.\'/Home/Index/login\',
    __ROOT__.\'/Home/Index/loginOut\',
),

这样在每个方法前会自动去判断session,session不存在返回登录页;

问题来了,当空操作就会在页面返回登录页,后面继续执行 _empty()里的内容;
_empty()里的内容被追加在登录页;


http://localhost/ackonphp/home/index/testconn这个路径在拦截后进入登录页,但此路径的内容仍被执行,追加在登录页后;

自动执行session判断达不到相应
if(!session(\'loginUser\')){
  return;
}
来阻止程序继续执行;
问题在于一旦session不存在应该直接进入登录页,后续操作终止;

这是由于thinkphp处理机制的问题,那么只能选择手工调用判断session的方法了。

ThinkPHP函数详解:session方法

以上是关于002thinkphp获取项目信息的主要内容,如果未能解决你的问题,请参考以下文章

ThinkPHP项目笔记之MVC篇

基于ThinkPHP框架小程序获取微信用户信息并将存进数据库

thinkphp5.0学习笔记获取信息,变量,绑定参数

如何让thinkphp在获取数据库字段信息时区分数据库字段大小写

thinkphp上传文件后获取不到信息

HLS NGINX-RTMP [错误] 1281#0:* 58 hls:强制片段拆分:10.002 秒