3.0 版本新進度?

即將推出。我保證。如許多人所知,我最近完成撰寫一本新的 O'Reilly Media 書籍—現代 PHP。我很興奮我的書即將出版,並應於一兩個月內上架。遺憾的是,寫書是一項耗時的任務。我還有一份朝九晚五的工作。生活有時會阻礙前進。藉口,藉口…我知道 :) 我現在有空閒時間再努力開發 Slim。所以現況如何?非常棒。

新網站

我本週在 https://slimframework.dev.org.tw/ 發布了一個嶄新的閃亮網站。它各方面都更好,且託管在 GitHub Pages 上。如果你看到需要改進之處,網站程式碼在 https://github.com/codeguy/Slim-Website 公開提供。發送一個 pull request,我會合併你的變更。

新的 IRC 頻道

我註冊了一個名為 #slimphp 新的 Freenode 主要頻道。我積極專心努力每天都登入,並在你於頻道中留下訊息時收到通知。如果你有任何問題或只是想聊聊,請加入 #slimphp 頻道並打聲招呼。

新文件

我目前正在為 3.0 版重新編寫框架文件。這還遠未完成,但你可以到 http://docs-new.slimframework.com/ 閱讀正在進行的文件(網址可能會變更)。與新網站類似,文件託管在 GitHub 上,網址為 https://github.com/codeguy/Slim-Documentation。如果你可以改進文件,請發送一個 pull request,我會合併你的變更。

3.0 版

下一個框架版本將為 3.0 版。這是一項重大更新,影響框架的所有部分。以下是幾個重點

相依性注入

\Slim\App 類別將延伸 Pimple,以便我們可以輕鬆將第三方元件注入 Slim 應用程式中,或覆寫 Slim 許多內部物件,例如請求、回應或檢視物件。

PSR-7 支援

Slim 的 HTTP 請求和回應抽象將支援 PSR-7。這表示他們的介面將與先前的版本有顯著不同。過去每個 Slim 應用程式只有一個請求物件和一個回應物件,且在整個應用程式中都以參照傳遞。

版本 3 則是以值物件的方式處理要求和回應物件。每個中間層和應用程式路由都會收到最新的要求和回應物件作為參數。每個中間層和路由回呼都責任傳回更新過的 HTTP 回應物件。

HTTP 要求和回應物件也都是不可變。您必須使用適當的 withStatus()withHeader()withBody() 等要求和回應物件方法,才能建立並傳回包含特定變更的新要求或回應物件。您可以在 https://github.com/php-fig/fig-standards/blob/master/proposed/http-message.md 閱讀 PSR-7 文件中有關新介面的更多資訊。

這也讓與 Slim Framework 使用第三方中間層成為可能。例如,或許您找到為其他框架設計的 PSR-7 中間層。然而,由於使用了 PSR-7 介面,該中間層也與 Slim 相容。

Slim 的 PSR-7 變更聽起來很複雜,但實際上相當簡單。我很快會在新文件中提供更多深入資訊。您可以在底下網址閱讀更多有關 PSR-7 的資訊

已編碼為介面

3.0 版本的編碼方式為,所有內部應用程式方法都預期使用介面,而不是具體的類別實作。這表示,如果您願意,可以輕鬆為任何 Slim 應用程式的依賴項提供自己的實作,也可以使用 Pimple 儲存器服務注入或覆寫依賴項。

路由回呼繫結

如果您使用 Closure 作為路由回呼常式,Closure 將繫結至 \Slim\App 執行個體。這表示您會透過 $this 關鍵字存取 Closure內部的應用程式執行個體。

<?php
$app = new \Slim\App();
$app->get('/hello', function ($req, $res) {
    $this['view']->display('profile.html', [
        'name' => 'Josh',
        'url' => 'https://joshlockhart.com'
    ]);
});

更簡單的程式碼庫

框架程式碼庫將會更簡單。過去 \Slim\App 類別包含許多關於呈現或回應標頭的方法。情況已不再如此。我將許多方法移入其他適當的類別。例如,\Slim\App::contentType()\Slim\App::status() 將會移除,您必須使用回應物件的方法來修改 HTTP 回應。\Slim\App::render() 方法將會移除,您必須使用檢視物件的 render()display() 方法改為替代。這些只是部分範例。我相信這些變更讓 Slim 變得更小、更直覺、更容易使用。

拉取要求

過去一年,我積了不少待處理的絕佳 Pull request,对此,我深感抱歉。我會儘快處理它們,合併能合併的,並關閉其他的。我無法使用所有 Pull request,即使有些很好。在我能更妥善整理問題追蹤之前,我建議你們先暫緩傳送新的 Pull request。

分支策略

Slim 將採用新的、更簡化的分支策略。將會有一個 master 分支。分支 HEAD 參考會代表最新的不穩定程式碼。穩定版本會加上數字版本號標籤(例如 3.0.0)。

之前,我曾試圖使用 Git Flow 分支策略,但證明對這個專案來說太複雜,且會造成更多混淆與問題,而非其他事物。

目前的 master 分支將重新命名為 legacy-2.x(或類似名稱),目前的 develop 分支將重新命名為 master。所有後續開發都將在新的 master 分支上恢復。這個名稱變更可能讓現有的 Pull request 作廢。如果造成這個狀況,我深感抱歉。但這是對專案的未來和我的精神狀態最好的決定。這種分支名稱變更尚未進行,但它會在 3.0 版本釋出之前進行。

路線圖

我很快會在專案的 GitHub wiki 上建立新的路線圖。一完成,我便會公告。

單元測試

目前,develop 分支中的許多單元測試都損壞了。最近我動作很快並且損壞了些東西(我的意思是,是開發分支)。這些測試很快就會修復好。