thinkPHP5框架接口写法简单示例


Posted in PHP onAugust 05, 2019

本文实例讲述了thinkPHP5框架接口写法。分享给大家供大家参考,具体如下:

控制器

/**
* 添加收货地址
*/
public function addAddress(){
    $post = $this->request->post();
    //验证 唯一规则: 表名,字段名,排除主键值,主键名
    $validate = new \think\Validate([
      ['uid', 'require', '用户id不能为空'],
      ['name', 'require|max:20', '收件人不能为空'],
      ['mobile', 'require|length:11', '手机号码不能为空'],
      ['province_id', 'require', '省份不能为空'],
      ['city_id', 'require', '城市不能为空'],
      ['district_id', 'require', '县区不能为空'],
      ['detail', 'require|max:100', '地址详情不能为空'],
    ],[
      'mobile.length' => '手机号码格式不正确',
      'name.max' => '收件人不能超过20个字符',
      'detail.max' => '地址详情不能超过100个字符',
    ]);
    //验证部分数据合法性
    if (!$validate->check($post)) {
      \Org\Response::show(400,'提交失败:' . $validate->getError());
    }
    $user_id = $post['uid'];
    $name = $post['name'];
    $mobile = $post['mobile'];
    $province_id = $post['province_id'];
    $city_id = $post['city_id'];
    $district_id = $post['district_id'];
    $detail = $post['detail'];
    $is_address = model('address')->addAddress($user_id,$name,$mobile,$province_id,$city_id,$district_id,$detail);
    if($is_address){
      \Org\Response::show(200,'access!');
    }else{
      \Org\Response::show(400,'添加失败!');
    }
}

model

<?php
namespace app\index\model;
use \think\Model;
use app\index\model\Attachment as AttachmentModel;
class Address extends Model
{
  /**
   * 获取一个基本信息
   * @param int $id   行政id
   * @return array|bool|false|\PDOStatement|string|Model
   */
  public function adcodeGetOne($id = 0){
    if(empty($id)) return false;
    $map['adcode'] = $id;
    return \think\Db::name('district')->where($map)->find();
  }
  /**
   * @param $user_id   用户id
   * @param $name     收件人
   * @param $mobile    收件人手机号
   * @param $province_id 省行政id
   * @param $city_id   城市行政id
   * @param $district_id 县区行政id
   * @param $detail    详细地址
   */
  public function addAddress($user_id,$name,$mobile,$province_id,$city_id,$district_id,$detail){
    $is_province = $this->adcodeGetOne($province_id);
    $is_city = $this->adcodeGetOne($city_id);
    $is_district= $this->adcodeGetOne($district_id);
    if(empty($is_province)) \Org\Response::show(400,'无效省份!');
    if(empty($is_city)) \Org\Response::show(400,'无效城市!');
    if(empty($is_district)) \Org\Response::show(400,'无效县区!');
    $time = time();
    $data['province_id'] =$province_id;
    $data['province'] = $is_province['name'];
    $data['city_id'] =$city_id;
    $data['city'] = $is_city['name'];
    $data['district_id'] =$district_id;
    $data['district'] = $is_district['name'];
    $data['detail'] =$detail;
    $data['mobile'] =$mobile;
    $data['name'] =$name;
    $data['user_id'] =$user_id;
    $data['is_delete'] = 0;
    if($this->where($data)->field('id')->find()) return true;
    $data['addtime'] =$time;
    $data['update_time'] =$time;
    if($this->insert($data)){
      return true;
    }else{
      return false;
    }
  }
}

Response

<?php
namespace Org;
class Response {
 const JSON = "json";
 /**
 * 按综合方式输出通信数据
 * @param integer $code 状态码
 * @param string $message 提示信息
 * @param array $data 数据
 * @param string $type 数据类型
 * return string
 */
 public static function show($code, $message = '', $data = array(), $type = self::JSON) {
 if(!is_numeric($code)) {
  return '';
 }
 // $type = 'json';
 isset($_GET['format']) ? $_GET['format'] : self::JSON;
 $result = array(
  'code' => $code,
  'message' => $message,
  'data' => $data,
 );
 if($type == 'json') {
  self::json($code, $message, $data);
  exit;
 } elseif($type == 'array') {
  var_dump($result);
 } elseif($type == 'xml') {
  self::xmlEncode($code, $message, $data);
  exit;
 } else {
  // TODO
 }
 }
 /**
 * 按json方式输出通信数据
 * @param integer $code 状态码
 * @param string $message 提示信息
 * @param array $data 数据
 * return string
 */
 public static function json($code, $message = '', $data = array()) {
 
 if(!is_numeric($code)) {
  return '';
 }
 $result = array(
  'code' => $code,
  'message' => urlencode($message),
  'data' => $data
 );
 echo urldecode(json_encode($result,JSON_UNESCAPED_UNICODE));
 exit;
 }
 /**
 * 按xml方式输出通信数据
 * @param integer $code 状态码
 * @param string $message 提示信息
 * @param array $data 数据
 * return string
 */
 public static function xmlEncode($code, $message, $data = array()) {
 if(!is_numeric($code)) {
  return '';
 }
 $result = array(
  'code' => $code,
  'message' => $message,
  'data' => $data,
 );
 header("Content-Type:text/xml");
 $xml = "<?xml version='1.0' encoding='UTF-8'?>\n";
 $xml .= "<root>\n";
 $xml .= self::xmlToEncode($result);
 $xml .= "</root>";
 echo $xml;
 }
 public static function xmlToEncode($data) {
 $xml = $attr = "";
 foreach($data as $key => $value) {
  if(is_numeric($key)) {
  $attr = " id='{$key}'";
  $key = "item";
  }
  $xml .= "<{$key}{$attr}>";
  $xml .= is_array($value) ? self::xmlToEncode($value) : $value;
  $xml .= "</{$key}>\n";
 }
 return $xml;
 }
}

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP 引用是个坏习惯
Mar 12 PHP
PHP实现的封装验证码类详解
Jun 18 PHP
从零开始学YII2框架(四)扩展插件yii2-kartikgii
Aug 20 PHP
php显示指定目录下子目录的方法
Mar 20 PHP
前端必学之PHP语法基础
Jan 01 PHP
php基于curl实现随机ip地址抓取内容的方法
Oct 11 PHP
php+js实现百度地图多点标注的方法
Nov 30 PHP
laravel 时间格式转时间戳的例子
Oct 11 PHP
Laravel第三方包报class not found的解决方法
Oct 13 PHP
Laravel 读取 config 下的数据方法
Oct 13 PHP
laravel邮件发送的实现代码示例
Jan 31 PHP
php将字符串转换为数组实例讲解
May 05 PHP
ThinkPHP5+UEditor图片上传到阿里云对象存储OSS功能示例
Aug 05 #PHP
PHP各种常见经典算法总结【排序、查找、翻转等】
Aug 05 #PHP
php时间戳转换代码详解
Aug 04 #PHP
ThinkPHP5.1框架数据库链接和增删改查操作示例
Aug 03 #PHP
ThinkPHP5&amp;5.1框架关联模型分页操作示例
Aug 03 #PHP
thinkPHP5.1框架使用SemanticUI实现分页功能示例
Aug 03 #PHP
thinkPHP5.1框架中Request类四种调用方式示例
Aug 03 #PHP
You might like
PHP 常见郁闷问题答解
2006/11/25 PHP
PHP调用Twitter的RSS的实现代码
2010/03/10 PHP
php 将字符串按大写字母分隔成字符串数组
2010/04/30 PHP
thinkphp实现上一篇与下一篇的方法
2014/12/08 PHP
centos+php+coreseek+sphinx+mysql之一coreseek安装篇
2016/10/25 PHP
laravel-admin 后台表格筛选设置默认的查询日期方法
2019/10/03 PHP
javascript 日期时间函数(经典+完善+实用)
2009/05/27 Javascript
javascript dom 操作详解 js加强
2009/07/13 Javascript
JavaScript Event学习第十一章 按键的检测
2010/02/10 Javascript
JQuery实现倒计时按钮的实现代码
2012/03/23 Javascript
javascript实现多级联动下拉菜单的方法
2015/02/06 Javascript
利用js实现禁止复制文本信息
2015/06/03 Javascript
一个非常好用的文字滚动的案例,鼠标悬浮可暂停[两种方案任选]
2016/12/01 Javascript
vue组件学习教程
2017/09/09 Javascript
JS call()及apply()方法使用实例汇总
2020/07/11 Javascript
解决Vue + Echarts 使用markLine标线(precision精度问题)
2020/07/20 Javascript
浅谈Vue使用Cascader级联选择器数据回显中的坑
2020/10/31 Javascript
[01:57]DOTA2上海特锦赛小组赛解说单车采访花絮
2016/02/27 DOTA
Python入门篇之面向对象
2014/10/20 Python
Python实现将n个点均匀地分布在球面上的方法
2015/03/12 Python
遗传算法python版
2018/03/19 Python
python爬取各类文档方法归类汇总
2018/03/22 Python
pandas DataFrame 交集并集补集的实现
2019/06/24 Python
Django 过滤器汇总及自定义过滤器使用详解
2019/07/19 Python
详解Django中异步任务之django-celery
2020/11/05 Python
python基于win32api实现键盘输入
2020/12/09 Python
HTML5拖放API实现自动生成相框功能
2020/04/07 HTML / CSS
eVitamins日本:在线购买折扣维生素、补品和草药
2019/04/04 全球购物
廉洁自律承诺书
2014/03/27 职场文书
小学生爱国演讲稿
2014/04/25 职场文书
2014年班主任德育工作总结
2014/12/05 职场文书
西安事变观后感
2015/06/12 职场文书
2016年“世界环境日”校园广播稿
2015/12/18 职场文书
在校大学生才艺比赛策划书怎么写?
2019/08/26 职场文书
MySQL中你可能忽略的COLLATION实例详解
2021/05/12 MySQL
golang内置函数len的小技巧
2021/07/25 Golang