资讯专栏INFORMATION COLUMN

ThinkPHP 3.2.3 的一个 Bug 和一个错误的设计

Dogee / 1909人阅读

摘要:于是为了使这个生效,只能将这个配置改成之外的任意字符串。。。然后在创建文件再创建文件我的目的是内调用的时候,响应的状态码变成。其实这也算另一个吧,然道不应该响应一个错误的状态码但是没办法,鉴于团队的平均水平,用开发仍然是最佳选择。

ThinkPHP 3.2.3 的 ajax_rerurn 这个 Hook 是有逻辑错误的……
源代码在这里:

    protected function ajaxReturn($data,$type="",$json_option=0) {
        if(empty($type)) $type  =   C("DEFAULT_AJAX_RETURN");
        switch (strtoupper($type)){
            case "JSON" :
                // 返回JSON数据格式到客户端 包含状态信息
                header("Content-Type:application/json; charset=utf-8");
                exit(json_encode($data,$json_option));
            case "XML"  :
                // 返回xml格式数据
                header("Content-Type:text/xml; charset=utf-8");
                exit(xml_encode($data));
            case "JSONP":
                // 返回JSON数据格式到客户端 包含状态信息
                header("Content-Type:application/json; charset=utf-8");
                $handler  =   isset($_GET[C("VAR_JSONP_HANDLER")]) ? $_GET[C("VAR_JSONP_HANDLER")] : C("DEFAULT_JSONP_HANDLER");
                exit($handler."(".json_encode($data,$json_option).");");  
            case "EVAL" :
                // 返回可执行的js脚本
                header("Content-Type:text/html; charset=utf-8");
                exit($data);            
            default     :
                // 用于扩展其他返回格式数据
                Hook::listen("ajax_return",$data);
        }
    }

其中 C("DEFAULT_AJAX_RETURN") 获取到的配置默认是 json
很明显 Hook::listen("ajax_return",$data) 所在的位置,决定了它正常情况都不会被调用。
不管你将它改成 xmljsonp、还是 eval

于是为了使这个 Hook 生效,只能将 DEFAULT_AJAX_RETURN 这个配置改成 jsonxmljsonpeval 之外的任意字符串。。。比如我将它改成 "DEFAULT_AJAX_RETURN" => "hook"

然后在创建文件:/Application/Admin/Conf/tags.php

 array("AdminBehaviorsajaxBehavior"),
);

再创建文件:/Application/Admin/Behaviors/ajaxBehavior.class.php


我的目的是:Controller 内调用 $this->error("tmdphp") 的时候,响应的 HTTP 状态码变成 500。
这样客户端才会正确的执行 jQuery.ajaxerror 回调。

其实这也算另一个 Bug 吧,ThinkController::error 然道不应该响应一个错误的 HTTP 状态码?

但是没办法,鉴于团队的平均水平,用 ThinkPHP 开发仍然是最佳选择。

等会去 Github 提交个 PR 看看会不会被采纳。。。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/30334.html

相关文章

  • 云帮(ACP)3月升级,支持PHP7、修复若干Bug

    摘要:本月产品层面的升级主要集中在语言源码构建方面,全面支持和并兼容开发框架。研发团队在这一个月中对底层组件进行了升级与调整,修复了个中等级别以上的。因为这个焦点,有广泛的支持,规格易于实现。 全面支持一条命令安装云帮平台、调整SDN网络组件、8 个中等级别以上的bug修复、云帮社区版 迎来2017年3月升级版本,本次升级主要集中在平台底层服务,以及云帮的私有化安装部署的流程上,针对SDN网...

    lastSeries 评论0 收藏0
  • 基于ThinkPHP5拿来即用高性能后台管理系统

    摘要:数据库文件已经上传,安装配置就可以使用简称即基于的后台管理系统官方文档地址在线体验地址账户密码线上仓库在线地址源代码下载克隆直接下载本地部署运行环境要求建议配置虚拟域名若不清楚,请自行解决之,方便接下来开展你的开发工作。 喜欢就Star,不只是Fork; 想要分享的动机才是驱动力,而技术仅仅是一种方法。 数据库文件已经上传,安装配置就可以使用 showImg(https://seg...

    894974231 评论0 收藏0
  • 基于ThinkPHP5拿来即用高性能后台管理系统

    摘要:数据库文件已经上传,安装配置就可以使用简称即基于的后台管理系统官方文档地址在线体验地址账户密码线上仓库在线地址源代码下载克隆直接下载本地部署运行环境要求建议配置虚拟域名若不清楚,请自行解决之,方便接下来开展你的开发工作。 喜欢就Star,不只是Fork; 想要分享的动机才是驱动力,而技术仅仅是一种方法。 数据库文件已经上传,安装配置就可以使用 showImg(https://seg...

    SHERlocked93 评论0 收藏0
  • TP-admin即基于ThinkPHP5拿来即用高性能后台管理系统

    摘要:即基于拿来即用高性能后台管理系统官方文档地址在线体验地址账户密码线上仓库在线地址源代码下载克隆直接下载本地部署运行环境要求建议配置虚拟域名若不清楚,请自行解决之,方便接下来开展你的开发工作。 新版本在线体验地址已经上线,欢迎体验? ---2017-01-14 喜欢就Star,不只是Fork; 想要分享的动机才是驱动力,而技术仅仅是一种方法。 ====================...

    Hydrogen 评论0 收藏0

发表评论

0条评论

Dogee

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<