thinkphp3.2 restful接口的实现

参考thinkphp3.2手册  专题=>restful;

REST(Representational State Transfer表述性状态转移)是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性.restful借口的实现必不可少的便是路由的运用。

启用路由:在Application\Common\Conf\config.php里开启路由,'URL_ROUTER_ON'   => true, 然后设置路由规则,在模块的配置文件中使用URL_ROUTE_RULES参数进行配置,配置格式是一个数组,每个元素都代表一个路由规则,例如:

    'URL_ROUTE_RULES'=>array(
    'news/:id' => 'Index/index',
    ),
表示Index控制器里面的index方法,在地址栏内输入index.php/Home/news/china.html则会输出china.xml.简单的了解路由规则的定义格式为: '路由表达式'=>'路由地址和传入参数'

在控制器里接收通过路由传过来的值:

<?php
namespace Home\Controller;
use Think\Controller\RestController;
Class IndexController extends Controller {
    public function index(){
          echo $_GET['id'];
      }
}
下面的是天气查询的一个简单小接口的实现:

<?php
namespace Home\Controller;
use Think\Controller\RestController;
Class IndexController extends RestController {
	
    public function index(){
		if(__EXT__==""||__EXT__=="html"){
			$type='html';
		}else{
			$type=__EXT__;
		}
		//print_r(__EXT__);
		$pyname = $_GET['id'];
	    switch ($this->_method){      
		     case 'get': // get请求处理代码         
		if ($type== 'html'){ 
			 // 'html';die;
			  $data=$this->city($pyname);
			  //print_r($data);
			  //Response方法会自动对data数据进行输出类型编码,目前支持的包括xml/json/html。
			  //$this->response($data,'json');
              $result=$this->response($data,'html');
              //print_r($result);
              return $result;
		 }elseif($type== 'xml'){ 
			 $data = $this->city($pyname);
			 $result = $this->response($data,'xml');
			 return $result;
		 }elseif($type=='json'){
			$data=$this->city($pyname);
			$result=$this->response($data,'json');
			return $result;
		 }           
		 break;      
		 case 'put': // put请求处理代码        
		 break;      
		 case 'post': // post请求处理代码          
		 break;  
		 }
		
    }

	 public function city($name){
       $sheng=M("sheng");
        $city=M("city");
        $xian=M("xian");
        if($name=='china'){
            $res=$sheng->select();
            //print_r($res);
            return $res;
        }else{
			//getFieldBy动态查询     根据字段查询并返回某个字段的值
            $sid=$sheng->getFieldByPyname($name,'id');
			//print_r($sid);die;
            if($sid==""){
                $cid=$city->getFieldByPyname($name,'id');
                if($cid==""){
                    $xid=$xian->getFieldByPyname($name,'id');
                        if($xid==""){
                            echo "没有该地天气数据";
                        }else{
                            $condition['id'] = $xid;
                            $res=$xian->where($condition)->select();
                            //print_r($res);
                            return $res;
                        }
                    }else{
                         $condition['p_id'] = $cid;
                         $res=$xian->where($condition)->select();
                        // print_r($res);
                        return $res;
                    }
                }else{
                    $condition['p_id'] = $sid;
                    $res=$city->where($condition)->select();
                     //print_r($res);
                    return $res;
            }
        }
     }

注意:IndexController继承的是RestController而非Controller;__EXT__表示的是自动检测资源类型.Response方法会自动对data数据进行输出类型编码,目前支持的包括xml/json/html 。  这样,一个简单的天气查询的接口就实现了。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值