项目初期搭建


下一篇: 数据库设计



项目大致的实现的功能:商家在APP上发布任务 带有自己淘宝或者京东的商品链接 。刷手 接受任务帮助 刷单 


这里就不考虑什么可行性分析什么了。主要是用来练手的。


本项目主要以 接口为主  主要目的是学习 ,不要直接运用线上


1 准备工作

http://www.thinkphp.cn/down.html

下载最新的tp5框架 ,我这里下载的是核心版


备注一下我的开发环境

系统:window

ide:phpstrom 

集成环境:phpstudy

php : 5.6 或者7.0 都行


2 配置本地虚拟域名 

使用集成环境PHPstudy自带的工具方便配置虚拟域名 点击查看详情

这里我配置的是  up61_whale.cn


image.png



3  项目结构搭建


3.1 配置全局异常  




image.png


重写异常处理方法  ExceptionHandler.php

<?php
namespace app\lib\exception;
use think\exception\Handle;
use think\Log;
use think\Request;

class ExceptionHandler extends Handle {
  private $code;
  private $msg;

  // 需要返回客户端当前请求的URL
  public function render(\Exception $e) {
     if ($e instanceof BaseException) {
        // 如果是自定义异常
        $this->code = $e->code;
           $this->msg = $e->msg;
         
     } else {
        if (config ( 'app_debug' )) {
           return parent::render ( $e );
        } else {
           $this->code = 500;
           $this->msg = '服务器异常!';
         
           $this->recordErrorLog ( $e );
               Log::error(request()->url ());
        }
     }

     $result = [
           'code' => $this->code,
           'msg' => $this->msg,
         
     ];


     return json ( $result );
  }

  // 记录异常日志
  private function recordErrorLog(\Exception $e) {
     Log::init ( [
           'type' => 'File',
           'path' => LOG_PATH,
           'level' => [
                 'error'
           ]
     ] );
     Log::record ( $e->getMessage (), 'error' );
  }


}


基础异常类 BaseException.php


<?php

namespace app\lib\exception;
use think\Exception;

class BaseException extends Exception
{
   //HTTP 状态码 400 200
   public $code = 400;
   public $msg = '参数错误';
 

   public function __construct($param = [])
   {
      if(!is_array($param)){
          return ;
//           throw new Exception('参数必须是数组');
      }else{

          if(array_key_exists('code',$param)){
              $this->code = $param['code'];
          }
          if(array_key_exists('msg',$param)){
              $this->msg = $param['msg'];
          }
         
      }
   }

}


另外就是替换掉默认的异常处理类 


image.png



在自定义的异常类中  我们重新定义了日志


这里需要关闭默认的日志配置

image.png


type : 修改为test  表示关闭


在index.php  文件中  重新配置日志  

define('LOG_PATH', __DIR__ . '/../log/');
\think\Log::init([
   'type' =>'file',
   'path' =>LOG_PATH,
   'level'=>['sql']
]);


尝试一下 访问

image.png



再来查看一下日志 


image.png


抛出异常是 只会记录异常 

[ 2018-03-28T14:56:46+08:00 ] 127.0.0.1 GET /
[ error ] [2]Division by zero
[ error ] Division by zero
[ error ] /


另外就是对于tp5来说 是不能直接返回数组的 ,。我们可以试一下



直接在默认的控制方法中  返回数组


return ['name'=>'wang'];


请求以后 可以看到  

{"status":1,"error_code":1,"msg":"服务器异常!","errorCode":999}


在日志中 

[ 2018-03-28T14:58:31+08:00 ] 127.0.0.1 GET /
[ error ] [0]variable type errorarray
[ error ] variable type errorarray
[ error ] /


我们的接口返回形式一般都是已json格式返回 



在这里 tp5对于api 进行了很好的支持



在配置文件中找到

// 默认输出类型
'default_return_type'    => 'html',

把html改为json


可以看到返回结果发生了变化 

{"name":"wang"}


3.2 配置基础控制器 


<?php
/**
* Created by PhpStorm.
* User: [一秋]
* Date: 2018/3/28
* Time: 15:03
* Desc: 成功源于点滴
*/

namespace app\index\controller;
use think\Controller;

class ApiBaseController extends Controller
{
   public function apiSuccessReturn($msg,$data = [],$code = 200){
       return [
           'code'=>$code,
           'msg'=>$msg,
           'data'=> $data
       ];
   }
       
   public function apiErrorReturn($msg,$code = 0){
       return [
           'code'=>$code,
           'msg'=>$msg
       ];
   }
}


这里直接index 继承于该基础控制器


<?php
namespace app\index\controller;

class Index extends ApiBaseController
{
   public function index()
   {
       return $this->apiSuccessReturn('成功');
   }
}


返回结果如下

{"code":200,"msg":"成功","data":[]}


下一篇: 数据库设计