Heim PHP-Framework Denken Sie an PHP thinkphp5.0 erstellt schnell eine Schnittstellenschicht im erholsamen Stil (Beispielanalyse)

thinkphp5.0 erstellt schnell eine Schnittstellenschicht im erholsamen Stil (Beispielanalyse)

Jun 20, 2020 pm 01:44 PM
restful thinkphp

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

thinkphp5.0 erstellt schnell eine Schnittstellenschicht im erholsamen Stil (Beispielanalyse)

下面是基于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>
Nach dem Login kopieren

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

apache方法:

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

LoadModule rewrite_module modules/mod_rewrite.so
Nach dem Login kopieren

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>
Nach dem Login kopieren

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;);
Nach dem Login kopieren

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,
];
Nach dem Login kopieren

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;); 		// 所有请求都支持的路由规则
Nach dem Login kopieren

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;;
}
Nach dem Login kopieren

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]);
		}
    }
}
Nach dem Login kopieren

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();
?>
Nach dem Login kopieren

请求工具类
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); } }
Nach dem Login kopieren

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

Das obige ist der detaillierte Inhalt vonthinkphp5.0 erstellt schnell eine Schnittstellenschicht im erholsamen Stil (Beispielanalyse). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So führen Sie das Thinkphp-Projekt aus So führen Sie das Thinkphp-Projekt aus Apr 09, 2024 pm 05:33 PM

Um das ThinkPHP-Projekt auszuführen, müssen Sie: Composer installieren, das Projektverzeichnis aufrufen und http://localhost:8000 aufrufen.

Es gibt mehrere Versionen von thinkphp Es gibt mehrere Versionen von thinkphp Apr 09, 2024 pm 06:09 PM

ThinkPHP verfügt über mehrere Versionen, die für verschiedene PHP-Versionen entwickelt wurden. Zu den Hauptversionen gehören 3.2, 5.0, 5.1 und 6.0, während Nebenversionen dazu dienen, Fehler zu beheben und neue Funktionen bereitzustellen. Die neueste stabile Version ist ThinkPHP 6.0.16. Berücksichtigen Sie bei der Auswahl einer Version die PHP-Version, die Funktionsanforderungen und den Community-Support. Für optimale Leistung und Support wird empfohlen, die neueste stabile Version zu verwenden.

So führen Sie thinkphp aus So führen Sie thinkphp aus Apr 09, 2024 pm 05:39 PM

Schritte zum lokalen Ausführen von ThinkPHP Framework: Laden Sie ThinkPHP Framework herunter und entpacken Sie es in ein lokales Verzeichnis. Erstellen Sie einen virtuellen Host (optional), der auf das ThinkPHP-Stammverzeichnis verweist. Konfigurieren Sie Datenbankverbindungsparameter. Starten Sie den Webserver. Initialisieren Sie die ThinkPHP-Anwendung. Greifen Sie auf die URL der ThinkPHP-Anwendung zu und führen Sie sie aus.

Entwicklungsvorschläge: So verwenden Sie das ThinkPHP-Framework zur Implementierung asynchroner Aufgaben Entwicklungsvorschläge: So verwenden Sie das ThinkPHP-Framework zur Implementierung asynchroner Aufgaben Nov 22, 2023 pm 12:01 PM

„Entwicklungsvorschläge: So verwenden Sie das ThinkPHP-Framework zur Implementierung asynchroner Aufgaben“ Mit der rasanten Entwicklung der Internettechnologie stellen Webanwendungen immer höhere Anforderungen an die Verarbeitung einer großen Anzahl gleichzeitiger Anforderungen und komplexer Geschäftslogik. Um die Systemleistung und das Benutzererlebnis zu verbessern, erwägen Entwickler häufig die Verwendung asynchroner Aufgaben, um einige zeitaufwändige Vorgänge auszuführen, z. B. das Senden von E-Mails, das Verarbeiten von Datei-Uploads, das Erstellen von Berichten usw. Im Bereich PHP bietet das ThinkPHP-Framework als beliebtes Entwicklungsframework einige praktische Möglichkeiten zur Implementierung asynchroner Aufgaben.

Was ist besser, Laravel oder Thinkphp? Was ist besser, Laravel oder Thinkphp? Apr 09, 2024 pm 03:18 PM

Leistungsvergleich von Laravel- und ThinkPHP-Frameworks: ThinkPHP schneidet im Allgemeinen besser ab als Laravel und konzentriert sich auf Optimierung und Caching. Laravel schneidet gut ab, aber für komplexe Anwendungen ist ThinkPHP möglicherweise besser geeignet.

So installieren Sie thinkphp So installieren Sie thinkphp Apr 09, 2024 pm 05:42 PM

ThinkPHP-Installationsschritte: Bereiten Sie PHP-, Composer- und MySQL-Umgebungen vor. Erstellen Sie Projekte mit Composer. Installieren Sie das ThinkPHP-Framework und die Abhängigkeiten. Datenbankverbindung konfigurieren. Anwendungscode generieren. Starten Sie die Anwendung und besuchen Sie http://localhost:8000.

Wie ist die Leistung von thinkphp? Wie ist die Leistung von thinkphp? Apr 09, 2024 pm 05:24 PM

ThinkPHP ist ein leistungsstarkes PHP-Framework mit Vorteilen wie Caching-Mechanismus, Codeoptimierung, Parallelverarbeitung und Datenbankoptimierung. Offizielle Leistungstests zeigen, dass es mehr als 10.000 Anfragen pro Sekunde verarbeiten kann und in großen Websites und Unternehmenssystemen wie JD.com und Ctrip in praktischen Anwendungen weit verbreitet ist.

Entwicklungsvorschläge: So verwenden Sie das ThinkPHP-Framework für die API-Entwicklung Entwicklungsvorschläge: So verwenden Sie das ThinkPHP-Framework für die API-Entwicklung Nov 22, 2023 pm 05:18 PM

Entwicklungsvorschläge: So verwenden Sie das ThinkPHP-Framework für die API-Entwicklung Mit der kontinuierlichen Entwicklung des Internets ist die Bedeutung von API (Application Programming Interface) immer wichtiger geworden. Die API ist eine Brücke für die Kommunikation zwischen verschiedenen Anwendungen. Sie kann Datenaustausch, Funktionsaufrufe und andere Vorgänge realisieren und bietet Entwicklern eine relativ einfache und schnelle Entwicklungsmethode. Als hervorragendes PHP-Entwicklungsframework ist das ThinkPHP-Framework effizient, skalierbar und einfach zu verwenden.

See all articles