發布 Slim 4.0.0-alpha
我們興奮地宣布 Slim 4.0.0 alpha 版本已發布。請將所有此版本的回饋意見傳送至 Slim 4 Alpha 版本回饋討論串。新文件位於 這裡。
整體方向
此重大版本著重於下列事項
- 實作 PSR-15 中間層支援
- 鬆綁 Slim 對 PSR-7 實作的依賴,並允許使用任何 PSR-7 實作
- 鬆綁我們對 Pimple 的相依性,並允許使用任何 PSR-11 ContainerInterface 實作
- 鬆綁我們對 FastRoute 的相依性,並實作介面,使用戶可以使用任何路由函式庫
- 將錯誤處理與核心鬆綁,並讓使用者輕鬆使用自己的實作
- 將回應發送與核心鬆綁,並讓使用者輕鬆使用自己的實作
- 移除所有 特徵,以產生更乾淨的呼叫堆疊追蹤,利於除錯
- 建立 App 工廠,更容易建立
App
實例,因為更高的模組化提高了複雜性
重大變更
- Slim 需要 PHP 7.1 或更高版本。
- Slim 不再附帶 PSR-7 實作。
- Slim 不再附帶 Pimple。
- Slim 不再將
default_mimetype
設為空字串,因此您需要在 php.ini 或使用ini_set('default_mimetype', '')
的應用程式中自行設定。 - Slim
App::$settings
已移除,已實作多個中間層,取代各別設定的功能。 - 現在透過
Slim\Middleware\RoutingMiddleware
進行路由。預設情況下,路由將在中間層佇列中最後執行。若要存取$request
中的route
及routingResults
屬性,您需要將此中間層最後新增,因為它在執行應用程式時會在佇列中首先執行。中間層佇列仍以最後進、最先出 (LIFO) 的順序執行。這取代了determineRouteBeforeAppMiddleware
設定。 - 現在透過
Slim\Middleware\OutputBufferingMiddleware
進行輸出快取。這取代了outputBuffering
設定。 - 內容長度標頭計算現在已經透過
Slim\Middleware\ContentLengthMiddleware
完成。這將取代addContentLengthHeader
設定。 RouterInterface
元件已分割成 4 個介面RouteCollectorInterface
、RouteParserInterface
、RouteResolverInterface
和DispatcherInterface
。- 雙重通行中介軟體已被棄用。中介軟體簽章現在是 PSR-15
MiddlewareInterface
簽章process(Request $request, RequestHandler $handler)
。我們不再支援雙重通行function ($request, $response, $next)
簽章。您仍可以使用具有簽章function (Request $request, RequestHandler $handler) {}
的可呼叫物件建立中介軟體,或使用具有該簽章的可呼叫類別。 - Slim
App
現在實作 PSR-15RequestHandlerInterface
。使用$app->handle($request)
取代$app($request)
。 - PSR-15 RequestHandler 現在可用作路由可呼叫物件。
- 已移除
$app
與RouteGroup
可呼叫物件的連結。RouteCollectorProxy
會注入到RouteGroup
的可呼叫物件中。$app->group('/group', function (RouteCollectorProxy $group) { $group->get(...); }
- 已移除
App::subRequest()
方法。您可以在路由可呼叫物件中透過$app->handle($request)
執行子請求。 - 已移除
SlimException
。已實作新的HttpException
,分別為HttpBadRequestException
、HttpForbiddenException
、HttpInternalServerErrorException
、HttpMethodNotAllowedException
、HttpNotFoundException
、HttpNotImplementedException
和HttpUnauthorizedException
。您也可以透過擴充HttpException
或HttpSpecializedException
來建立您自己的類型。 - 當使用者
App::map()
時,請求方法名稱現在會區分大小寫。 - 已移除所有特徵。
CallableResolverTrait
和MiddlewareAwareTrait
不再存在。 - 引入了兩個新工廠
AppFactory
和ServerRequestCreatorFactory
,以方便建立App
和ServerRequest
。目前支援 4 種 PSR-7/ServerRequest 建立器的組合(Slim-Psr7、Nyholm PSR-7 和 Nyholm PSR-7 Server、Guzzle PSR-7 和 Guzzle HTTP Factory 以及 Zend-Diactoros)。
變更記錄
新增項目
- #2642 新增
AppFactory
,以啟用 PSR-7 執行和 ServerRequest 建立器的自動偵測。 - #2641 新增
RouteCollectorProxyInterface
,將所有的路由對應功能從 app 提取到其自己的介面中。 - #2640 新增
RouteParserInterface
,並徹底將 FastRoute 路由剖析器與核心分開。方法relativePathFor()
、urlFor()
和fullUrlFor()
現在位於此介面中。 - #2639 新增
DispatcherInterface
,並徹底將 FastRoute 調度器與核心分開。這讓我們有辦法將路由器執行取代為其他路由器。 - #2638 在
RouteCollector::fullUrlFor()
中新增功能,以產生完全限定的 URL - #2634 新增按路由依序設定呼叫策略的能力。
$app->get(...)->setInvocationStrategy($strategy)
- #2555 新增 PSR-15 中間件支援
- #2529 Slim 不再附帶 PSR-7 實作。您需要提供 PSR-7 ServerRequest 和 PSR-17 ResponseFactory 才能執行 Slim。
- #2507 方法名稱在
Router::map()
中現在區分大小寫,因此,在 App::map() 中也區分大小寫。 - #2497 PSR-15 RequestHandlers 現在可以使用於路由呼叫函式
- #2496 Slim App 現在可以使用於 PSR-15 Request Handler
- #2405
RoutingMiddleware
現在新增routingResults
請求屬性,用於保存路由的結果 - #2404 Slim 4 需要 PHP 7.1 或更高版本
- #2425 新增
$app->redirect()
- #2398 新增
Middleware\ErrorMiddleware
- #2329 加入
Middleware\MethodOverrideMiddleware
- #2288 將路由和分派分開
- #2254 加入
Middleware\ContentLengthMiddleware
- #2166 加入
Middleware\OutputBufferingMiddleware
已棄用
- #2654
RouteParser::pathFor()
和RouteParser::relativePathFor()
已棄用,請使用RouteParser::urlFor()
和RouteParser::relativeUrlFor()
- #2641 棄用
RouteCollector::pushGroup()
、RouteCollector::popGroup()
,可用RouteCollector::group()
取代 - #2638 棄用
RouteCollector::pathFor()
,可用RouteCollector::urlFor()
取代,但保留原始功能 - #2589 移除
App::$settings
- #2560 取消套用
$this
到RouteGroup
callable - #2555 雙重中間件支援已被棄用
已移除
- #2612 移除 Routable,重新設計 RouteGroup 和 Route 介面
- #2589 完全移除
App::$settings
- #2587 移除 Pimple 作為 dev 相依性套件
- #2398 Slim 不再在 App 中內建錯誤處理。請加入
Slim\Middleware\ErrorMiddleware
作為最外層的中間件。 - #2375 Slim 不再將
default_mimetype
設為空字串,因此您需要自行在 php.ini 或您的 app 中使用ini_set('default_mimetype', '');
設定。 - #2288
determineRouteBeforeAppMiddleware
設定已移除。請在需要的地方加入 RoutingMiddleware()。 - #2254
addContentLengthHeader
設定已移除 - #2221
Slim\Http
已移除,現在 Slim 依賴於獨立的 Slim-Http 元件 - #2166
outputBuffering
設定已移除 - #2078 移除
App::subRequest()
- #2098 移除 CallableResolverTrait
- #2102 從路由器中移除容器
- #2124 移除
Slim\Exception\SlimException
- #2174 從 Container-Interop 轉移到 PSR-11
- #2290 移除容器
- #2560 移除
$this
與group()
的連結
已修正
- #2588 修正
Router::setCacheFile()
檔案/目錄權限處理方式 - #2067 單元測試現已可在 Windows 系統上通過
- #2405 我們在傳遞到 FastRoute 前已
rawurldecode()
路徑,因此路徑中的 UTF-8 字元現在應該能夠正常運作。
逐步建立 Hello World
步驟 1:安裝 Composer
尚未安裝 Composer 嗎?請按照 下載 頁面上的說明進行操作即可輕鬆安裝。
步驟 2:安裝 Slim
我們建議您使用 Composer 安裝 Slim。請瀏覽至專案的根目錄,並執行下方顯示的 bash 指令。此指令會將 Slim Framework 及其第三方依賴項下載到專案的 vendor/
目錄中。
composer require slim/slim "^4.0"
步驟 3:安裝 PSR-7 實作與 ServerRequest 建立器
在開始使用 Slim 之前,您需要選擇最適合您的應用程式的 PSR-7 實作。若要順利進行自動偵測並讓您可以使用 AppFactory::create()
和 App::run()
,而不必手動建立 ServerRequest
,您需要安裝下列實作之一
Slim PSR-7
composer require slim/psr7
Nyholm PSR-7 與 Nyholm PSR-7 Server
composer require nyholm/psr7 nyholm/psr7-server
Guzzle PSR-7 與 Guzzle HTTP Factory
composer require guzzlehttp/psr7 http-interop/http-factory-guzzle
Zend Diactoros
composer require zendframework/zend-diactoros
步驟 4:Hello World
<?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();
Slim 4 DDD 架構
@l0gicgate 建立了一款擁有 DDD 樣式目錄結構、範例檔案和測試範圍的架構範本。它非常有主見,我們尚未肯定是否為架構範本的適切選擇,但我們希望收到一些回饋。您可以複製架構範本並加以嘗試
git clone https://github.com/l0gicgate/Slim-Skeleton.git
git checkout 4.x