关于TP3.2.3RESTFul的实现分享

浏览:4558 发布日期:2015/08/16 分类:技术分享 关键字:
首先声明REST只是一个风格一种规范,并非严格要求。

官方提供的两种实现方式,最新文档地址:http://www.kancloud.cn/manual/thinkphp/1879一、两种方式的实现:

第1种:http://localhost/user/login  用户登录,自动判断请求类型返回相应的资源。
http://localhost/user/reg     用户注册,自动判断请求类型返回相应的资源。
第2种:http://locahost/user/1.json  读取用户(ID为1)的信息返回json类型
http://locahost/user/1.xml   读取用户(ID为1)的信息返回xml类型
http://locahost/user/1.html 读取用户(ID为1)的信息返回html类型
二、路由配置说明如下:{
    //路由
    'URL_ROUTER_ON' => true, // 开启URL路由
    'URL_ROUTE_RULES' => array(array('user/:id','user/read',array('ext'=>'xml','method'=>'get'))
)
注意:以上配置有个问题,就是这句加不加都行:array('ext'=>'xml','method'=>'get')。

得出结论:采用read_get_xml定义方式的无须设定,array('ext'=>'xml','method'=>'get'),程序会自动判断。
即:通过http://locahost/user/1.json这种网址访问的时候,最终好像是程序根据后缀名判断的,好像路由没起作用。

三、直接贴代码吧:

1、控制器代码<?php
namespace Home\Controller;
use Think\Controller\RestController;

class UserController extends RestController {

    /**
     * 读取用户信息
     */
    Public function read_get_json(){
        echo "read_get_json";
    }

    Public function read_get_xml(){
        echo "read_get_xml";
    }

   //官方文档中未直接说明的地方:如果去掉上面的read_get_xml(),访问locahost/user/1.xml时,系统将自动访问以下read_xml()方法。
   Public function read_xml(){
        echo "read_xml";
    }

    Public function read_post_json(){
        echo "read_post_json";
    }

    Public function read_post_xml(){
        echo "read_post_xml";
    }


    /**
     * 登录认证
     @param username 用户名
     @param password 密码
     @return 成功:{"code":200,"msg":"登录成功"}
     @return 失败:{"code":401,"msg":"用户名或密码错误!"}
     */
    Public function login(){
        switch ($this->_method){
            case 'get':
                break;
            case 'put':
                break;
            case 'post':
                $data['uname'] =I('post.username');
                $data['pwd']   =I('post.password');
                $result=M('user')->where($data)->find();
                if(false == $result) {
                    $value['code']    =401;
                    $value['msg'] ='用户名或密码错误!';
                    $this->response($value,'json');
                }else {
                    if($result['pwd'] != I('post.password')) {
                        $value['code']    =401;
                        $value['msg'] ='用户名或密码错误!';
                        $this->response($value,'json');
                    }
                    $value['code']=200;
                    $value['msg']="登录成功!";
                }
                $this->response($value,'json');
                break;
        }
    }

    /**
     * 新用户注册
     @param username 用户名
     @param password 密码
     @return 成功:{"code":200,"msg","注册成功!"}
     @return 失败1:{"code":403,"msg","用户名已被抢注,请换一个试试!"}
     @return 失败2:{"code":500,"msg","注册似乎遇到问题!"}
     */
    Public function reg(){
        switch ($this->_method){
            case 'get':
                break;
            case 'put':
                break;
            case 'post':
                $userModel = M('user');
                $data['uname'] =I('post.username');
                //是否被抢注
                $FinduserModel = $userModel->getFieldByuname($data['uname'],"id");
                if($FinduserModel){
                    $value['code']=403;
                    $value['msg']="用户名已被抢注,请换一个试试!";
                    $this->response($value,'json');
                }
                $data['pwd']   =I('post.password');
                $data['ctime'] =time();
                $data['ltime'] =time();
                $result=$userModel->add($data);
                if($result){
                    $value['code'] =200;
                    $value['msg']  ="注册成功!";
                }else{
                    $value['code'] =500;
                    $value['msg']  ="注册遇到问题!";
                }
                $this->response($value,'json');
                break;
        }
    }
}
2、测试post时的测试代码,很简单 <!DOCTYPE html>
 <html>
 <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     <title>测试</title>
     <style type="text/css">
     div{
         margin-top:30px;
     }
     </style>
 </head>
 <body>

     <div align="center">
        <p align="center">测试get</p>
        <a href="/user/1.json">get提交json</a>
        <a href="/user/1.xml">get提交xml</a>
     </div>

    <div align="center">
        <p align="center">测试post</p>
         <form method="post" name="" action="/user/1.json">
            <input type="submit" value="post提交json"/>
         </form>
        <form method="post" name="" action="/user/1.xml">
            <input type="submit" value="post提交xml"/>
        </form>
    </div>

 </body>
 </html>
有不对的地方,欢迎指出,谢谢~~
最佳答案
评论( 相关
后面还有条评论,点击查看>>