2023/06/30

PHP Slim 4 framework 初體驗

作者:吳祐賓


Delphi WebBroker 屬於 Web 微服務的一種,自 D7 到現在的 Delphi 社群版都有此框架,挾帶著性能優異的 TDataSet 物件,將微服務提升到商業應用的等級也是分分鐘鐘的事情。

還記得那很久以前被遺忘的 RadPHP?讓我聯想到 PHP 是不是也有類似的框架,能夠將 WebBroker 的概念也套用在上頭,同時 PHP 也擁有和 ADO 概念近似的 PDO,或許可以將某些 WebBroker 專案轉到 PHP 上也說不定。

截至 2023/06,Slim 已發展到 4 版,看了一下手冊的 Hello World,感覺相當容易,結果手冊和實際設計還是有點落差,既然都為 HelloWorld Debug 過一輪了,就順手把 Slim 4 Hello World 設定過程寫下來和各位分享。

安裝

XAMPP 安裝和設定就不提了,PHP 版本資訊:



第一步:安裝 Composer

部署 Slim 4 Web Application 需要使用 Composer 進行安裝,所以要先安裝 Composer



第二步:建立網站目錄,並使用 Composer 安裝 Slim 4

 建立 Slim Web Application 目錄,如 myapp,並在該目錄路徑下執行指令:

1
composer require slim/slim:"4.*"


第三步:安裝 PSR-7 Implementation and ServerRequest Creator

PSR-7 套件用來處理 ServerRequest,省下我們處理它的時間,PSR-7 套件有四款:

  • Slim PSR-7
  • Nyholm PSR-7 and Nyholm PSR-7 Server
  • Guzzle PSR-7 (Version 1 or 2)
  • Laminas Diactoros

這四款只要挑選一款來安裝即可,這裡我選擇 Slim PSR-7:

1
composer require slim/psr7





Hello World

按照官方手冊的作法建立 public/index.php 檔案,程式碼:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
<?php
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Slim\Factory\AppFactory;

require __DIR__ . '/../vendor/autoload.php';

$app = AppFactory::create();

$app->get('/', function (Request $request, Response $response, $args) {
    $response->getBody()->write("Hello world!");
    return $response;
});

$app->run();

然後就出錯了:

官方手冊上就到這邊,也不知道為何會錯。詢問 ChatGPT 後,它是這樣解釋的:

這個錯誤信息表明你的Slim應用程序在處理一個HTTP請求時未能找到匹配的路由,因此拋出了一個HttpNotFoundException。這通常意味著URL路徑不匹配你在應用程序中定義的任何路由

stackoverflow 則有高手指出使用「setBasePath」就能夠排除此問題,調整之後程式如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
<?php
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Slim\Factory\AppFactory;

require __DIR__ . '/../vendor/autoload.php';

$app = AppFactory::create();

$app->setBasePath("/myapp/public");

$app->get('/', function (Request $request, Response $response, $args) {
    $response->getBody()->write("Hello, World!");
    return $response;
});

$app->run();


透過 BasePath 和路由設定,這裡要注意不要將 index.php 寫上,如此我們就可以使用 URL:http://127.0.0.1/myapp/public/ 進行連結:



總結

Slim 官方推薦的樣板 (Slim skeleton) 在 Slim 4 下已經無法使用,要使用 Slim 4 還是從官方手冊著手會比較容易。

而且 Slim 4 的起手式已經比 Slim 3 以前還要來得簡單,作為 Web 微服務非常合適。

和你分享。



作者新書在這裡


2023/06/01

官方 DataSnap 教案集錦

作者:吳祐賓

 

Paweł Głowacki 錄製一系列關於 DataSnap 的教授課程,有興趣的朋友可以自以下連結進行閱讀:

Unleash the power of Delphi: DataSnap
https://www.embarcadero.com/rad-in-action/delphi-labs