<?php


// +----------------------------------------------------------------------


// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]


// +----------------------------------------------------------------------


// | Copyright (c) 2006-2014 http://thinkphp.cn All rights reserved.


// +----------------------------------------------------------------------


// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )


// +----------------------------------------------------------------------


// | Author: liu21st <liu21st@gmail.com>


// +----------------------------------------------------------------------


namespace Think;


/**


 * ThinkPHP API模式控制器基类


 */


abstract class Controller {





   /**


     * 架构函数


     * @access public


     */


    public function __construct() {


        //控制器初始化


        if(method_exists($this,'_initialize'))


            $this->_initialize();


    }





    /**


     * 魔术方法 有不存在的操作的时候执行


     * @access public


     * @param string $method 方法名


     * @param array $args 参数


     * @return mixed


     */


    public function __call($method,$args) {


        if( 0 === strcasecmp($method,ACTION_NAME.C('ACTION_SUFFIX'))) {


            if(method_exists($this,'_empty')) {


                // 如果定义了_empty操作 则调用


                $this->_empty($method,$args);


            }else{


                E(L('_ERROR_ACTION_').':'.ACTION_NAME);


            }


        }else{


            E(__CLASS__.':'.$method.L('_METHOD_NOT_EXIST_'));


            return;


        }


    }





    /**


     * Ajax方式返回数据到客户端


     * @access protected


     * @param mixed $data 要返回的数据


     * @param String $type AJAX返回数据格式


     * @return void


     */


    protected function ajaxReturn($data,$type='') {


        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));


            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).');');  


            case 'EVAL' :


                // 返回可执行的js脚本


                header('Content-Type:text/html; charset=utf-8');


                exit($data);            


        }


    }





    /**


     * Action跳转(URL重定向） 支持指定模块和延时跳转


     * @access protected


     * @param string $url 跳转的URL表达式


     * @param array $params 其它URL参数


     * @param integer $delay 延时跳转的时间 单位为秒


     * @param string $msg 跳转提示信息


     * @return void


     */


    protected function redirect($url,$params=array(),$delay=0,$msg='') {


        $url    =   U($url,$params);


        redirect($url,$delay,$msg);


    }





}