框架增加restful api功能

2020/03/17 posted in  服务端
Tags:  #php

由于项目中使用自已开发的php框架,发现没有restful功能.

restful架构

如下图,简单的CURD功能,以资源为定位

class Blog
{
    /**
     * 显示资源列表
     *
     * @return \think\Response
     */
    public function index()
    {
        $list = Blogs::all();
        return json($list);
    }

    /**
     * 保存新建的资源
     *
     * @param  \think\Request  $request
     * @return \think\Response
     */
    public function save(Request $request)
    {
        $data   = $request->param();
        $result = Blogs::create($data);
        return json($result);
    }

    /**
     * 显示指定的资源
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function read($id)
    {
        $data = Blogs::get($id);
        return json($data);
    }

    /**
     * 保存更新的资源
     *
     * @param  \think\Request  $request
     * @param  int  $id
     * @return \think\Response
     */
    public function update(Request $request, $id)
    {
        $data   = $request->param();
        $result = Blogs::update($data, ['id' => $id]);
        return json($result);
    }

    /**
     * 删除指定资源
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function delete($id)
    {
        $result = Blogs::destroy($id);
        return json($result);
    }
}

框架的更新

框架比较简单
url.com/{control}/{action} 或 url.com/index.php/{control}/{action}即可访问
我们要实现用户系统的用户添加,通过有资源有
查看全部用户 /user/read/
查看指定用户 /user/read/1
更新指定用户 /user/edit/1
删除指定用户 /user/delete/1
除了control和action的path,其实后面便可以按顺序注入

把path后台的参数,注入进去即可。

功能如下:

PHP_INO

有些朋友忘记设置nginx的php info功能,是用不了/index.php/index/index这种的

关键配置

fastcgi_split_path_info       ^(.+\.php)(.*)$;
fastcgi_param SCRIPT_FILENAME /path/to/php$fastcgi_script_name;
fastcgi_param PATH_INFO       $fastcgi_path_info;

完整配置:

location ~ [^/]\.php(/|$) {
        fastcgi_pass 172.20.0.3:9000;
        #fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_split_path_info       ^(.+\.php)(.*)$;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO       $fastcgi_path_info;
    }

php.ini配置文件


cgi.fix_pathinfo=0 ;这个要设置为0