ホームページ PHPフレームワーク ThinkPHP thinkphp5.0 は、Restful スタイルのインターフェイス層を迅速に構築します (分析例)

thinkphp5.0 は、Restful スタイルのインターフェイス層を迅速に構築します (分析例)

Jun 20, 2020 pm 01:44 PM
restful thinkphp

下面由thinkphp框架教程栏目给大家介绍thinkphp5.0极速搭建restful风格接口层实例,希望对需要的朋友有所帮助!

thinkphp5.0 は、Restful スタイルのインターフェイス層を迅速に構築します (分析例)

下面是基于ThinkPHP V5.0 RC4框架,以restful风格完成的新闻查询(get)、新闻增加(post)、新闻修改(put)、新闻删除(delete)等server接口层。

1、下载ThinkPHP V5.0 RC4版本;

2、配置虚拟域名(非必须,只是为了方便);

Apache\conf\extra\httpd-vhosts.conf

<VirtualHost *:80>
    DocumentRoot "D:/webroot/tp5/public"
    ServerName www.tp5-restful.com
    <Directory "D:/webroot/tp5/public">
	DirectoryIndex index.html index.php 
	AllowOverride All
	Order deny,allow
	Allow from all
	</Directory>
</VirtualHost>
ログイン後にコピー

3、开启伪静态支持.htaccess文件

apache方法:

a)在conf目录下httpd.conf中找到下面这行并去掉#

LoadModule rewrite_module modules/mod_rewrite.so
ログイン後にコピー

b)将所有AllowOverride None改成AllowOverride All

public\.htaccess文件内容:

<IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]
</IfModule>
ログイン後にコピー

4、创建测试数据
tprestful.sql

--
-- 数据库: `tprestful`
--

-- --------------------------------------------------------

--
-- 表的结构 `news`
--

CREATE TABLE IF NOT EXISTS `news` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,
  `content` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COMMENT=&#39;新闻表&#39; AUTO_INCREMENT=1;

--
-- 转存表中的数据 `news`
--

INSERT INTO `news` (`id`, `title`, `content`) VALUES
(1, &#39;新闻1&#39;, &#39;新闻1内容&#39;),
(2, &#39;新闻2&#39;, &#39;新闻2内容&#39;),
(3, &#39;新闻3&#39;, &#39;新闻3内容&#39;),
(4, &#39;房价又涨了&#39;, &#39;据新华社消息:上海均价环比上涨5%&#39;);
ログイン後にコピー

5、修改数据库配置文件
application\database.php

<?php
return [
    // 数据库类型
    &#39;type&#39;           => &#39;mysql&#39;,
    // 服务器地址
    &#39;hostname&#39;       => &#39;127.0.0.1&#39;,
    // 数据库名
    &#39;database&#39;       => &#39;tprestful&#39;,
    // 用户名
    &#39;username&#39;       => &#39;root&#39;,
    // 密码
    &#39;password&#39;       => &#39;123456&#39;,
    // 端口
    &#39;hostport&#39;       => &#39;&#39;,
    // 连接dsn
    &#39;dsn&#39;            => &#39;&#39;,
    // 数据库连接参数
    &#39;params&#39;         => [],
    // 数据库编码默认采用utf8
    &#39;charset&#39;        => &#39;utf8&#39;,
    // 数据库表前缀
    &#39;prefix&#39;         => &#39;&#39;,
    // 数据库调试模式
    &#39;debug&#39;          => true,
    // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
    &#39;deploy&#39;         => 0,
    // 数据库读写是否分离 主从式有效
    &#39;rw_separate&#39;    => false,
    // 读写分离后 主服务器数量
    &#39;master_num&#39;     => 1,
    // 指定从服务器序号
    &#39;slave_no&#39;       => &#39;&#39;,
    // 是否严格检查字段是否存在
    &#39;fields_strict&#39;  => true,
    // 数据集返回类型 array 数组 collection Collection对象
    &#39;resultset_type&#39; => &#39;array&#39;,
    // 是否自动写入时间戳字段
    &#39;auto_timestamp&#39; => false,
    // 是否需要进行SQL性能分析
    &#39;sql_explain&#39;    => false,
];
ログイン後にコピー

6、定义restful风格的路由规则,
application\route.php

<?php
use think\Route;
Route::get(&#39;/&#39;,function(){
    return &#39;Hello,world!&#39;;
});
Route::get(&#39;news/:id&#39;,&#39;index/News/read&#39;);	//查询
Route::post(&#39;news&#39;,&#39;index/News/add&#39;); 		//新增
Route::put(&#39;news/:id&#39;,&#39;index/News/update&#39;); //修改
Route::delete(&#39;news/:id&#39;,&#39;index/News/delete&#39;); //删除
//Route::any(&#39;new/:id&#39;,&#39;News/read&#39;); 		// 所有请求都支持的路由规则
ログイン後にコピー

7、新建模型
application\index\model\News.php

<?php
namespace app\index\model;
use think\Model;
class News extends Model{
	protected $pk = &#39;id&#39;;
	//protected static $table = &#39;news&#39;;
}
ログイン後にコピー

8、新建控制器
application\index\controller\News.php

<?php
namespace app\index\controller;
use think\Request;
use think\controller\Rest;

class News extends Rest{
	public function rest(){
        switch ($this->method){
			case &#39;get&#39;: 	//查询
				$this->read($id);
				break;
			case &#39;post&#39;:	//新增
				$this->add();
				break;
			case &#39;put&#39;:		//修改
				$this->update($id);
				break;
			case &#39;delete&#39;:	//删除
				$this->delete($id);
				break;
			
        }
    }
    public function read($id){
		$model = model(&#39;News&#39;);
		//$data = $model::get($id)->getData();
		//$model = new NewsModel();
		$data=$model->where(&#39;id&#39;, $id)->find();// 查询单个数据
		return json($data);
    }
	
	public function add(){
		$model = model(&#39;News&#39;);
		$param=Request::instance()->param();//获取当前请求的所有变量(经过过滤)
		if($model->save($param)){
			return json(["status"=>1]);
		}else{
			return json(["status"=>0]);
		}
    }
	public function update($id){
		$model = model(&#39;News&#39;);
		$param=Request::instance()->param();
		if($model->where("id",$id)->update($param)){
			return json(["status"=>1]);
		}else{
			return json(["status"=>0]);
		}
    }
	public function delete($id){
		
		$model = model(&#39;News&#39;);
		$rs=$model::get($id)->delete();
		if($rs){
			return json(["status"=>1]);
		}else{
			return json(["status"=>0]);
		}
    }
}
ログイン後にコピー

9、测试
a)、访问入口文件,默认在public\index.php

b)、客户端测试restful的get、post、put、delete方法

client\client.php

<?php
require_once &#39;./ApiClient.php&#39;;

$param = array(
  &#39;title&#39; => &#39;房价又涨了&#39;,
  &#39;content&#39; => &#39;据新华社消息:上海均价环比上涨5%&#39;
);
$api_url = &#39;http://www.tp5-restful.com/news/4&#39;; 
$rest = new restClient($api_url, $param, &#39;get&#39;);
$info = $rest->doRequest();
//$status = $rest->status;//获取curl中的状态信息


$api_url = &#39;http://www.tp5-restful.com/news&#39;; 
$rest = new restClient($api_url, $param, &#39;post&#39;);
$info = $rest->doRequest();

$api_url = &#39;http://www.tp5-restful.com/news/4&#39;; 
$rest = new restClient($api_url, $param, &#39;put&#39;);
$info = $rest->doRequest();

echo &#39;<pre/>&#39;;
print_r($info);exit;

$api_url = &#39;http://www.tp5-restful.com/news/4&#39;; 
$rest = new restClient($api_url, $param, &#39;delete&#39;);
$info = $rest->doRequest();
?>
ログイン後にコピー

请求工具类
client\ApiClient.php

<?php
class restClient
{
  //请求的token
  const token=&#39;yangyulong&#39;;
  
  //请求url
  private $url;
    
  //请求的类型
  private $requestType;
    
  //请求的数据
  private $data;
    
  //curl实例
  private $curl;
  
  public $status;
  
  private $headers = array();
  /**
   * [__construct 构造方法, 初始化数据]
   * @param [type] $url     请求的服务器地址
   * @param [type] $requestType 发送请求的方法
   * @param [type] $data    发送的数据
   * @param integer $url_model  路由请求方式
   */
  public function __construct($url, $data = array(), $requestType = &#39;get&#39;) {
      
    //url是必须要传的,并且是符合PATHINFO模式的路径
    if (!$url) {
      return false;
    }
    $this->requestType = strtolower($requestType);
    $paramUrl = &#39;&#39;;
    // PATHINFO模式
    if (!empty($data)) {
      foreach ($data as $key => $value) {
        $paramUrl.= $key . &#39;=&#39; . $value.&#39;&&#39;;
      }
      $url = $url .&#39;?&#39;. $paramUrl;
    }
      
    //初始化类中的数据
    $this->url = $url;
      
    $this->data = $data;
    try{
      if(!$this->curl = curl_init()){
        throw new Exception(&#39;curl初始化错误:&#39;);
      };
    }catch (Exception $e){
      echo &#39;<pre class="brush:php;toolbar:false">&#39;;
      print_r($e->getMessage());
      echo &#39;
'; } curl_setopt($this->curl, CURLOPT_URL, $this->url); curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, 1); //curl_setopt($this->curl, CURLOPT_HEADER, 1); } /** * [_post 设置get请求的参数] * @return [type] [description] */ public function _get() { } /** * [_post 设置post请求的参数] * post 新增资源 * @return [type] [description] */ public function _post() { curl_setopt($this->curl, CURLOPT_POST, 1); curl_setopt($this->curl, CURLOPT_POSTFIELDS, $this->data); } /** * [_put 设置put请求] * put 更新资源 * @return [type] [description] */ public function _put() { curl_setopt($this->curl, CURLOPT_CUSTOMREQUEST, 'PUT'); } /** * [_delete 删除资源] * delete 删除资源 * @return [type] [description] */ public function _delete() { curl_setopt($this->curl, CURLOPT_CUSTOMREQUEST, 'DELETE'); } /** * [doRequest 执行发送请求] * @return [type] [description] */ public function doRequest() { //发送给服务端验证信息 if((null !== self::token) && self::token){ $this->headers = array( 'Client-Token:'.self::token,//此处不能用下划线 'Client-Code:'.$this->setAuthorization() ); } //发送头部信息 $this->setHeader(); //发送请求方式 switch ($this->requestType) { case 'post': $this->_post(); break; case 'put': $this->_put(); break; case 'delete': $this->_delete(); break; default: curl_setopt($this->curl, CURLOPT_HTTPGET, TRUE); break; } //执行curl请求 $info = curl_exec($this->curl); //获取curl执行状态信息 $this->status = $this->getInfo(); return $info; } /** * 设置发送的头部信息 */ private function setHeader(){ curl_setopt($this->curl, CURLOPT_HTTPHEADER, $this->headers); } /** * 生成授权码 * @return string 授权码 */ private function setAuthorization(){ $authorization = md5(substr(md5(self::token), 8, 24).self::token); return $authorization; } /** * 获取curl中的状态信息 */ public function getInfo(){ return curl_getinfo($this->curl); } /** * 关闭curl连接 */ public function __destruct(){ curl_close($this->curl); } }
ログイン後にコピー

完整代码从我github下载:https://github.com/phper-hard/tp5-restful

以上がthinkphp5.0 は、Restful スタイルのインターフェイス層を迅速に構築します (分析例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

thinkphpプロジェクトの実行方法 thinkphpプロジェクトの実行方法 Apr 09, 2024 pm 05:33 PM

ThinkPHP プロジェクトを実行するには、Composer をインストールし、Composer を使用してプロジェクトを作成し、プロジェクト ディレクトリに入り、php bin/consoleserve を実行し、http://localhost:8000 にアクセスしてようこそページを表示する必要があります。

thinkphp にはいくつかのバージョンがあります thinkphp にはいくつかのバージョンがあります Apr 09, 2024 pm 06:09 PM

ThinkPHP には、さまざまな PHP バージョン向けに設計された複数のバージョンがあります。メジャー バージョンには 3.2、5.0、5.1、および 6.0 が含まれますが、マイナー バージョンはバグを修正し、新機能を提供するために使用されます。最新の安定バージョンは ThinkPHP 6.0.16 です。バージョンを選択するときは、PHP バージョン、機能要件、コミュニティ サポートを考慮してください。最高のパフォーマンスとサポートを得るには、最新の安定バージョンを使用することをお勧めします。

thinkphpの実行方法 thinkphpの実行方法 Apr 09, 2024 pm 05:39 PM

ThinkPHP フレームワークをローカルで実行する手順: ThinkPHP フレームワークをローカル ディレクトリにダウンロードして解凍します。 ThinkPHP ルート ディレクトリを指す仮想ホスト (オプション) を作成します。データベース接続パラメータを構成します。 Webサーバーを起動します。 ThinkPHP アプリケーションを初期化します。 ThinkPHP アプリケーションの URL にアクセスして実行します。

laravelとthinkphpではどちらが優れていますか? laravelとthinkphpではどちらが優れていますか? Apr 09, 2024 pm 03:18 PM

Laravel フレームワークと ThinkPHP フレームワークのパフォーマンスの比較: ThinkPHP は、最適化とキャッシュに重点を置いて、一般に Laravel よりもパフォーマンスが優れています。 Laravel は優れたパフォーマンスを発揮しますが、複雑なアプリケーションの場合は、ThinkPHP の方が適している可能性があります。

thinkphpのインストール方法 thinkphpのインストール方法 Apr 09, 2024 pm 05:42 PM

ThinkPHP のインストール手順: PHP、Composer、および MySQL 環境を準備します。 Composer を使用してプロジェクトを作成します。 ThinkPHP フレームワークと依存関係をインストールします。データベース接続を構成します。アプリケーションコードを生成します。アプリケーションを起動し、http://localhost:8000 にアクセスします。

開発に関する提案: ThinkPHP フレームワークを使用して非同期タスクを実装する方法 開発に関する提案: ThinkPHP フレームワークを使用して非同期タスクを実装する方法 Nov 22, 2023 pm 12:01 PM

「開発に関する提案: ThinkPHP フレームワークを使用して非同期タスクを実装する方法」 インターネット技術の急速な発展に伴い、Web アプリケーションには、多数の同時リクエストと複雑なビジネス ロジックを処理するための要件が​​ますます高まっています。システムのパフォーマンスとユーザー エクスペリエンスを向上させるために、開発者は多くの場合、電子メールの送信、ファイルのアップロードの処理、レポートの生成など、時間のかかる操作を実行するために非同期タスクの使用を検討します。 PHP の分野では、人気のある開発フレームワークとして ThinkPHP フレームワークが、非同期タスクを実装するための便利な方法をいくつか提供しています。

thinkphpのパフォーマンスはどうですか? thinkphpのパフォーマンスはどうですか? Apr 09, 2024 pm 05:24 PM

ThinkPHP は、キャッシュ メカニズム、コードの最適化、並列処理、データベースの最適化などの利点を備えた高性能 PHP フレームワークです。公式パフォーマンステストでは、1秒あたり10,000以上のリクエストを処理できることが示されており、実際のアプリケーションではJD.comやCtripなどの大規模なWebサイトやエンタープライズシステムで広く使用されています。

ファイル転送機能を実現するThinkPHP6とSwooleをベースとしたRPCサービス ファイル転送機能を実現するThinkPHP6とSwooleをベースとしたRPCサービス Oct 12, 2023 pm 12:06 PM

ThinkPHP6 と Swoole をベースとした RPC サービスがファイル転送機能を実装 はじめに: インターネットの発展に伴い、ファイル転送は私たちの日常業務においてますます重要になってきています。この記事では、ファイル転送の効率化とセキュリティを向上させるために、ThinkPHP6とSwooleをベースとしたファイル転送機能を実現するRPCサービスの具体的な実装方法を紹介します。 WebフレームワークとしてThinkPHP6を使用し、SwooleのRPC機能を利用してサーバー間のファイル転送を実現します。 1. 環境基準

See all articles