文档章节

YII 增加ThinkPHP的success、error、ajaxReturn、U、M、D方法

别人说我名字很长
 别人说我名字很长
发布于 2013/12/29 15:54
字数 1092
阅读 1418
收藏 1

楼主是从ThinkPHP转过来的,感觉TP的方法很好用,现在把他封装一下

首先修改项目的控制器基类  项目/protected/components/Controller.php

class Controller extends CController
{
	/**
	 * @var string the default layout for the controller view. Defaults to '//layouts/column1',
	 * meaning using a single column layout. See 'protected/views/layouts/column1.php'.
	 */
	//public $layout='//layouts/column1';
        public $layout=false;
	/**
	 * @var array context menu items. This property will be assigned to {@link CMenu::items}.
	 */
	public $menu=array();
	/**
	 * @var array the breadcrumbs of the current page. The value of this property will
	 * be assigned to {@link CBreadcrumbs::links}. Please refer to {@link CBreadcrumbs::links}
	 * for more details on how to specify this property.
	 */
	public $breadcrumbs=array();
        
     /**
     * 成功提示
     * @param type $msg 提示信息
     * @param type $jumpurl 跳转url
     * @param type $wait 等待时间
     */
    public function success($msg="",$jumpurl="",$wait=3){
        self::_jump($msg, $jumpurl, $wait, 1);
    }
    /**
     * 错误提示
     * @param type $msg 提示信息
     * @param type $jumpurl 跳转url
     * @param type $wait 等待时间
     */
    public function error($msg="",$jumpurl="",$wait=3){
        self::_jump($msg, $jumpurl, $wait, 0);
    }
    /**
     * 最终跳转处理
     * @param type $msg 提示信息
     * @param type $jumpurl 跳转url
     * @param type $wait 等待时间
     * @param int $type 消息类型 0或1
     */
    public function _jump($msg="",$jumpurl="",$wait=3,$type=0){
        //生成URL地址
        if(is_array($jumpurl)){
            $jumpurl = $this->U($jumpurl[0],$jumpurl[1]);
        }elseif($jumpurl){
            $jumpurl = $this->U($jumpurl);
        }
        $data = array(
            'msg' => $msg,
            'jumpurl' => $jumpurl,
            'wait' => $wait,
            'type' => $type
        );
        $data['title'] = ($type==1) ? "提示信息" : "错误信息";
        if(empty($jumpurl)){
            if($type==1){
                $data['jumpurl']=isset($_SERVER['HTTP_REFERER'])?$_SERVER['HTTP_REFERER']:"javascript:window.close();";
            }else{
                $data['jumpurl'] = "javascript:history.back(-1);";
            }
        }
        
        $this->renderPartial("//sys/template",array('data'=>$data));
    }
    
    /*
     * 根据参数拼成路由
     * @param string actionName方法名
     * @param array $param 参数 
     */
    public function U($actionName,$param=''){
        if($param){
            return $this->createUrl($actionName, $param);
        }else{
            return $this->createUrl($actionName);
        }        
    }
    
    /**
     * Ajax方式返回数据到客户端
     * @access public
     * @param mixed $data 要返回的数据
     * @param String $type AJAX返回数据格式
     * @return void
     */
    public function ajaxReturn($data, $type = 'JSON') {
        switch (strtoupper($type)) {
            case 'JSON' :
                // 返回JSON数据格式到客户端 包含状态信息
                header('Content-Type:application/json; charset=utf-8');
                exit(json_encode($data));
            case 'XML' :
                // 返回xml格式数据
                header('Content-Type:text/xml; charset=utf-8');
                exit($this->xml_encode($data));
            case 'EVAL' :
                // 返回可执行的js脚本
                header('Content-Type:text/html; charset=utf-8');
                exit($data);
            default :
                // 其他返回格式抛出异常
                exit('该数据格式尚未支持,请修改本函数源码添加对应的头');
        }
    }
    
    /*
     * 数据库的M方法
     * @param string $sql sql语句
     * @return object 
     */
    public function M($sql=''){
        $obj = Yii::app()->db->createCommand($sql);
        return $obj;
    }
    
    /*
     * 数据库的M方法
     * @param string $modelName 模型名
     * @param int $type 0=增 or 1=删改查
     * @return object 
     */
    public function D($modelName,$type=1){
        if($type){
            $model = call_user_func(array($modelName,model));     
        }else{
            $model = new $modelName();
        }
        return $model;
    }
    
    
    
    /*
     * dump方法
     * @param $data 打印的数据
     */
    public function dump($data){
        echo '<pre>';
        var_dump($data);
        echo '</pre>';
    }
}



然后增加一个跳转的视图 项目/views/sys/template.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>跳转提示</title>
<style type="text/css">
*{ padding: 0; margin: 0; }
body{ background: #fff; font-family: '微软雅黑'; color: #333; font-size: 16px; }
.system-message{ width:500px;height:100px; margin:auto;border:6px solid #999;text-align:center; position:relative;top:50px;}
.system-message legend{font-size:24px;font-weight:bold;color:#999;margin:auto;width:100px;}
.system-message h1{ font-size: 100px; font-weight: normal; line-height: 120px; margin-bottom: 12px; }
.system-message .jump{ padding-right:10px;height:25px;line-height:25px;font-size:14px;position:absolute;bottom:0px;left:0px;background-color:#e6e6e1 ; display:block;width:490px;text-align:right;}
.system-message .jump a{ color: #333;}
.system-message .success,.system-message .error{ line-height: 1.8em; font-size: 15px }
.system-message .detail{ font-size: 12px; line-height: 20px; margin-top: 12px; display:none}
</style>
</head>
<body>
<fieldset class="system-message">
    <legend>提示信息</legend>
    <div style="text-align:left;padding-left:10px;height:75px;width:490px;  ">
        <?php if($data['type']):?>
        <p class="success">恭喜^_^!~<?php echo($data['msg']); ?></p>
        <?php else:?>
        <p class="error">Sorry!~<?php echo($data['msg']); ?></p>
        <?php endif;?>
        <p class="detail"></p>
        
    </div>
    <p class="jump">
        页面自动 <a id="href" href="<?php echo($data['jumpurl']); ?>">跳转</a> 等待时间: <b id="wait"><?php echo($data['wait']); ?></b>
    </p>
</fieldset>
    <div style="clear: both"></div> 
<script type="text/javascript">
    
(function(){
var wait = document.getElementById('wait'),href = document.getElementById('href').href;
totaltime=parseInt(wait.innerHTML);
var interval = setInterval(function(){
	var time = --totaltime;
        wait.innerHTML=""+time;
	if(time === 0) {
		location.href = href;
		clearInterval(interval);
	};
}, 1000);
})();

</script>
</body>
</html>



然后在控制器中就可以用这些方法了
class ArctypeController extends Controller{
    public function actionindex(){        
        echo $this->U('arctype/add',array('id'=>5));//U方法
        $this->ajaxReturn(array('title'=>'标题','type'=>'栏目'));//ajaxReturn方法之前不能有输出
        $this->success("写入数据成功",array('arctype/add',array('id'=>20,'name'=>'title')),3);//success方法
        $this->error("写入数据成功",array('arctype/add',array('id'=>20,'name'=>'title')),3);//error方法
        $this->dump($this->M('select id,typename from {{arctype}}')->queryAll());//M方法一
        $this->dump($this->M()
                ->from('{{archive}} arc')
                ->select('arc.id,arc.title,type.typename')
                ->join('{{arctype}} type','arc.typeid=type.id')
                ->queryAll());//M方法二
        $this->dump($this->D('Arctype')->findAll());//D方法删改查 第二个参数为0增
    }


多谢老爱的提醒,使用call_user_func(array($modelName,model)); 替代$modelName::model()的方式,所以D方法得以成功实行

© 著作权归作者所有

共有 人打赏支持
别人说我名字很长
粉丝 55
博文 254
码字总数 103692
作品 0
济南
程序员
加载中

评论(2)

gannimeiza
gannimeiza
为yii增加thinkphp风格, 这是有多蛋疼啊
吾爱
吾爱
//$model = $modelName::model(); //为毛这样不行,还在研究中

beacause php consider $modelName is a object variable.You need use call_user_func(array($modelName,'model')) instead.
Yii实战:将ThinPHP的success提示信息跳转功能移植到Yii上

本扩展是一个通用扩展,你可以将它移植到任何php项目中,该扩展来源于ThinkPHP的4个控制器方法success() error() ajaxReturn() dispatchJump()。 将jumpage目录复制到yii项目目录protectedex...

吾爱
2013/12/27
0
4
送给使用phpstorm+thinkphp开发者的福利

送给使用phpstorm+thinkphp开发者的福利 记得两年前的这个时候,我开始学习php。 我选择了thinkphp入门,写了我的第一个简单的cms。 当时我什么都不懂,但是这里的技术氛围好的,我每问必有大...

thinkyoung
2015/09/07
0
0
PHP框架 ThinkPHP3.2.3 Yii2 Laravel4.2 并发测试

一直听说PHP框架中Yii是多么多么的企业级,Laravel是多么多么的艺术、优雅、先进。而且他俩的性能又是多么多么的卓越,搞得我心痒痒的,好像去深入学习下。 由于我最近的新项目在用ThinkPHP开...

金三胖
2015/01/27
0
27
IDE netbeans 任务 任务列表 TODO

在代码中写入注释 // TODO 这里是注释 netbeans 中的任务列表就会 显示 这个注释 这是Thinkphp中用到的代码 版本 | 版本信息:ThinkPHP 3.0 Release 2012/3/5 类 abstract class Action 方法...

柏新星
2012/04/28
0
0
关于PATHINFO的重写规则解析

最近比较流行的框架比如laravel,yii国内的thinkphp都提供了以重定url的方式来实现pathinfo的url风格。 以thinkphp为例,提供了名为 "s"的get参数,只需要将路径重定向到这个参数上即可,比如...

吾爱
2014/05/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

20180920 rzsz传输文件、用户和用户组相关配置文件与管理

利用rz、sz实现Linux与Windows互传文件 [root@centos01 ~]# yum install -y lrzsz # 安装工具sz test.txt # 弹出对话框,传递到选择的路径下rz # 回车后,会从对话框中选择对应的文件传递...

野雪球
36分钟前
0
0
OSChina 周四乱弹 —— 毒蛇当辣条

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @ 达尔文:分享花澤香菜/前野智昭/小野大輔/井上喜久子的单曲《ミッション! 健?康?第?イチ》 《ミッション! 健?康?第?イチ》- 花澤香菜/前野智...

小小编辑
今天
5
2
java -jar运行内存设置

java -Xms64m #JVM启动时的初始堆大小 -Xmx128m #最大堆大小 -Xmn64m #年轻代的大小,其余的空间是老年代 -XX:MaxMetaspaceSize=128m # -XX:CompressedClassSpaceSize=6...

李玉长
今天
1
0
Spring | 手把手教你SSM最优雅的整合方式

HEY 本节主要内容为:基于Spring从0到1搭建一个web工程,适合初学者,Java初级开发者。欢迎与我交流。 MODULE 新建一个Maven工程。 不论你是什么工具,选这个就可以了,然后next,直至finis...

冯文议
今天
1
0
RxJS的另外四种实现方式(四)——性能最高的库(续)

接上一篇RxJS的另外四种实现方式(三)——性能最高的库 上一篇文章我展示了这个最高性能库的实现方法。下面我介绍一下这个性能提升的秘密。 首先,为了弄清楚Most库究竟为何如此快,我必须借...

一个灰
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部