發佈 Slim 4.0.0
我們很高興宣布發佈 Slim 4.0.0。請將針對本版本的回饋全部傳送至 Slim 4 發佈回饋串。新的文件位於 這裡。
支援 PSR-7 實作 CI 狀態
注意:Travis-CI 已設定為至少每 24 小時自動觸發一次。
一般方向
對於此重大發佈,重點放在以下事項
- 實作 PSR-15 中介軟體支援
- 解除 Slim 對 Slim 的 PSR-7 實作的依賴,並啟用任何 PSR-7 實作
- 解除 Slim 對 Pimple 的依賴,並啟用任何 PSR-11 ContainerInterface 實作
- 解除 Slim 對 FastRoute 的依賴,並實作讓使用者能使用任何路由程式庫的介面
- 解除錯誤處理與核心,讓使用者能輕鬆使用自己的實作
- 解除回應發射與核心,讓使用者能輕鬆使用自己的實作
- 移除所有特色,以在除錯時提供更簡潔的呼叫堆疊追蹤
- 建立 app 工廠,讓建立
App
執行個體變得更加容易,藉此提高模組化
主要變更
- Slim 需要 PHP 7.1 或更高版本。
- Slim 不再提供 PSR-7 實作。
- Slim 不再提供 Pimple。
- Slim 不再將
default_mimetype
設定為空字串,所以你必須自己使用ini_set('default_mimetype', '')
在 php.ini 或你的 app 中設定它。 - 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
。- Double-Pass 中間件已被棄用。中間件簽章現在是 PSR-15
MiddlewareInterface
簽章process(Request $request, RequestHandler $handler)
。我們不再支援 double-passfunction ($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()
時,請求方法名稱現在會區分大小寫。 - 所有特質 (Trait) 都已被移除。
CallableResolverTrait
和MiddlewareAwareTrait
不再存在。 - 引入了兩個新的工廠。
AppFactory
和ServerRequestCreatorFactory
以促進建立App
和ServerRequest
。我們目前支援 4 個 PSR-7/ServerRequest creator 組合 (Slim-Psr7、Nyholm PSR-7 和 Nyholm PSR-7 Server、Guzzle PSR-7 和 Guzzle HTTP Factory 以及 Zend-Diactoros。
更新記錄
4.0.0 - 2019-08-01
已新增
- #2765 簡化內部中介軟體
ErrorMiddleware
和RoutingMiddleware
的排隊。 - #2759 新增
RouteContext
以允許多元存取目前的路線、路線解析器和路由結果。 - #2751 新增在
ErrorHandler
元件上設定預設錯誤渲染內容類型的功能。 - #2737 通過
ErrorRendererInterface
變更為使用可呼叫模式來利用CallableResolver
而進行 BC 變更。 - #2734 新增對內容類型基礎錯誤渲染器和設定預設錯誤渲染器的支援。
- #2716 當程式庫在作用範圍內時,新增 Slim-Http Request/Response 自動佈景。
- #2654
RouteParser::pathFor()
和RouteParser::relativePathFor()
已被標記為不建議使用。請使用RouteParser::urlFor()
和RouteParser::relativeUrlFor()
。 - #2642 新增
AppFactory
以啟用 PSR-7 實作和 ServerRequest creator 自動偵測。 - #2641 新增
RouteCollectorProxyInterface
以從應用程式中萃取出所有路線對應功能至其自己的介面中。 - #2640 新增
RouteParserInterface
,並將 FastRoute 路由分析器完全從核心區隔開。方法relativePathFor()
、urlFor()
和fullUrlFor()
現在位於此介面 - #2639 新增
DispatcherInterface
,並將 FastRoute 分派器完全從核心區隔開。這讓我們可以將路由實作替換為任何其他路由 - #2638 新增
RouteCollector::fullUrlFor()
以提供產生完整合格 URL 的功能 - #2634 新增針對每個路由設定呼叫策略的功能
- #2555 新增 PSR-15 中介軟體支援
- #2529 Slim 不再隨附 PSR-7 實作。您需要提供 PSR-7 ServerRequest 和 PSR-17 ResponseFactory 來執行 Slim
- #2507 Router::map() 中的方法名稱現在區分大小寫,因此「App::map()」也區分大小寫
- #2497 PSR-15 RequestHandler 現在可用作路由 callable
- #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
已棄用
- #2641 棄用
RouteCollector::pushGroup()
、RouteCollector::popGroup()
,由RouteCollector::group()
取代 - #2638 棄用
RouteCollector::pathFor()
,由RouteCollector::urlFor()
取代,並保留原有功能 - #2555 雙重通道中介軟體支援已棄用
已移除
- #2612 Remove Routable,重構 RouteGroup 和 Route 介面
- #2589 Remove App::$settings
- #2587 將 Pimple 移出開發依賴項
- #2398 Slim 不再內建於 App 中處理錯誤。新增 ErrorMiddleware() 作為最外層的 middleware
- #2375 Slim 不再將
default_mimetype
設為空字串,所以您需要自行在 php.ini 中或於應用程式中使用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 移除了 container。請使用
App::setContainer()
設定您自己的 - #2560 移除了 $this 對 group() 的繫結
變更
- #2104 設定為
App::__construct()
中最上層的陣列元素
修復
- #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 伺服器
composer require nyholm/psr7 nyholm/psr7-server
Guzzle PSR-7 和 Guzzle HTTP 工廠
composer require guzzlehttp/psr7 http-interop/http-factory-guzzle
Zend Diactoros
composer require zendframework/zend-diactoros
步驟 4:你好,世界
<?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 風格目錄結構、範例檔案和測試範圍的應用程式架構。它見仁見智且我們也不確定這種架構是否適合一個 Skeleton,但我們想要一些反饋訊息。你可以複製這個架構並試用看看
git clone https://github.com/l0gicgate/Slim-Skeleton.git
git checkout 4.x
Slim 4 MVC 架構
@adriansuter 創建了一個 MVC 架構。你可以複製這個架構並試用看看
git clone https://github.com/adriansuter/Slim4-Skeleton.git