PHP 框架學習(二):Laravel

預期學習目標php

  • Laravel官方推薦的幾本書
  • 關鍵文檔記錄
  • 項目搭建
  • 學習要點
  • 源碼學習

基本要點

命令行工具

# 在默認路徑下建立路由
php artisan make:controller Controller

# 在默認路徑下建立路由等價與如下命令
php artisan make:controller App\\Http\\Controllers\\Controller

# 在默認路徑下建立路由等價與如下命令
php artisan make:controller 'App\Http\Controllers\Controller'

# 自定義命名空間
php artisan make:controller 'App\Api\Auth\Controller'

路由的設置

Laravel 的路由不一樣與 ThinkPHP 的默認路由規則, Laravel 須要定義控制器路由html

查看路由定義狀況 : php artisan route:list
+--------+----------+-----+------+---------+------------+
| Domain | Method   | URI | Name | Action  | Middleware |
+--------+----------+-----+------+---------+------------+
|        | GET|HEAD | /   |      | Closure | web        |
+--------+----------+-----+------+---------+------------+

數據的遷移

# 數據構造器

php artisan make:seeder DataSeeder

安裝拓展

Swagger-php

  • 下載項目

Swagger-php 提供的 openapi 能夠在 CLI (命令行) 中執行生成元數據,全局安裝的意義就在此,能夠直接使用openapi 而不是全路徑git

# 直接下載倉庫代碼
https://github.com/swagger-api/swagger-editor.git

# 使用包管理工具安裝
composer require zircote/swagger-php

# 指定版本
composer require zircote/swagger-php 2.0.13

# 使用包管理工具安裝在全局
composer global require zircote/swagger-php

# 使用包管理工具安裝
composer install

元數據(Metadata),又稱中介數據、中繼數據,爲描述數據的數據(data about data),主要是描述數據屬性(property)的信息,用來支持如指示存儲位置、歷史數據、資源查找、文件記錄等功能。github

將代碼註釋生轉化爲元數據
# openapi的用法
.\vendor\bin\openapi --help

Usage: openapi [--option value] [/path/to/project ...]

Options:
  --output (-o)     Path to store the generated documentation.
                    ex: --output openapi.yaml
  --exclude (-e)    Exclude path(s).
                    ex: --exclude vendor,library/Zend
  --bootstrap (-b)  Bootstrap a php file for defining constants, etc.
                    ex: --bootstrap config/constants.php
  --processor       Register an additional processor.
  --format          Force yaml or json.
  --debug           Show additional error information.
  --help (-h)       Display this help message.

# 生成指定文件的元數據(yaml格式)到指定位置
vendor\bin\openapi vendor\zircote\swagger-php\Examples\ -o public\swagger-ui\dist\

# 生成指定文件的元數據(json格式)到指定位置
vendor\bin\openapi vendor\zircote\swagger-php\Examples\ -o public\swagger-ui\dist\ --format json

Swagger-ui

  • 下載項目

git clone https://github.com/swagger-api/swagger-ui.gitweb

  • 主要文件

須要用到的只有 dist 這個文件夾,能夠單獨部署,也能夠放在 public 文件夾內,爲了不讀取元數據的跨域問題,將元數據保存在同個位置npm

圖片描述

將本地元數據轉化爲API文檔
# 安裝 http-server 環境
npm install -g http-server

# 開啓服務並容許跨域資源共享
http-server --cors

# 瀏覽器打開 Swagger-UI 的界面
http://127.0.0.1:8080/ltf/public/swagger-ui/dist/

# 將本地元數據轉化爲API文檔
http://127.0.0.1:8080/ltf/public/swagger-ui/dist/openapi.yaml

圖片描述

上圖劃線位置根據輸入的元數據文件路徑生成API文檔,多個項目時即是在這裏根據元數據文件路徑切換API文檔json

  • 格式驗證

Swagger-UI 默認會將元數據傳給 swagger.io 進行格式驗證,因爲是公司內部項目因此關閉驗證功能bootstrap

# 在 index.html 中添加 validatorUrl: null 關閉驗證功能

  const ui = SwaggerUIBundle({
    validatorUrl: null,
    url: "openapi.yaml",
    dom_id: '#swagger-ui',
    deepLinking: true,
    presets: [
      SwaggerUIBundle.presets.apis,
      SwaggerUIStandalonePreset
    ],
    plugins: [
      SwaggerUIBundle.plugins.DownloadUrl
    ],
    layout: "StandaloneLayout"
  })
  • 默認元數據讀取路徑

如上代碼中的 url: "openapi.yaml",本來是 https://petstore.swagger.io/v2/swagger.json 官方提供的示例segmentfault

  • 自動更新文檔
# 建立一個控制器
php artisan make:controller SwaggerController

# 添加註釋以及實現掃描功能
/**
 * @OA\Info(title="My First API", version="0.1")
 */

/**
 * @OA\Get(
 *     path="/api/resource.json",
 *     @OA\Response(response="200", description="An example resource")
 * )
 */
public function scan()
{
    $openapi = \OpenApi\scan(__DIR__);
    header('Content-Type: application/x-yaml');
    return $openapi->toJson();
}
    
# 註冊路由
Route::get('scan', 'SwaggerController@scan');

# 訪問頁面
http://www.ltf.com/scan

# 將路徑寫入到index.html文件中實現掃描功能
url: "http://www.ltf.com/scan"

# 訪問API文檔頁面便可獲得最新文檔
http://www.ltf.com/doc

Swagger-editor

  • 下載項目

https://github.com/swagger-api/swagger-editor.git後端

  • 生成服務端代碼

Swagger 2.0版本能夠生成 PHP 後端代碼, OpenAPI 3.0.0 版本暫不支持

相關文章

PHP 框架學習(一):ThinkPHP
PHP 框架學習(二):Laravel

相關文章
相關標籤/搜索