バージョン3.0はどうなってるの?

もうすぐです。約束します。ご存知の方も多いと思いますが、私は最近、オライリーメディア向けに新しい書籍「Modern PHP」を執筆し終えました。私の本が出版間近で、1〜2ヶ月以内に書店に並ぶ予定であることを嬉しく思います。残念ながら、本の執筆は時間がかかる作業です。私は9時から5時までの仕事もしています。時々、人生が邪魔をするのです。言い訳、言い訳…分かっていますよ:) 今、私は再びSlimに取り組む自由な時間があります。それで、どうなっているのでしょうか?色々とあります。

新しいウェブサイト

今週、https://slimframework.dokyumento.jp/で新しいウェブサイトを立ち上げました。あらゆる面で改善されており、GitHub Pagesで公開されています。改善が必要な点を見つけた場合は、ウェブサイトのコードがhttps://github.com/codeguy/Slim-Websiteで公開されています。プルリクエストを送ってください。変更内容をマージします。

新しいIRCチャンネル

新しいプライマリFreenodeチャンネルとして#slimphpを登録しました。毎日ログインするように集中的に努力しており、チャンネルにメッセージが残された場合は常に通知を受け取ります。質問がある場合や、ただチャットしたい場合は、#slimphpチャンネルに参加して挨拶してください。

新しいドキュメント

現在、バージョン3.0向けのフレームワークドキュメントを書き直しています。これはまだ完成には程遠いですが、進行中のドキュメントをhttp://docs-new.slimframework.com/ (URLは変更される可能性があります) で読むことができます。新しいウェブサイトと同様に、ドキュメントはGitHubのhttps://github.com/codeguy/Slim-Documentationでホストされています。ドキュメントを改善できる場合は、プルリクエストを送ってください。変更内容をマージします。

バージョン3.0

次のフレームワークリリースはバージョン3.0になります。これは、フレームワークのすべての部分に触れるメジャーアップデートです。以下にいくつかのハイライトを示します。

依存性注入

\Slim\AppクラスはPimpleを拡張するため、Slimアプリケーションにサードパーティコンポーネントを簡単に注入したり、リクエスト、レスポンス、ビューオブジェクトなど、Slimの多くの内部オブジェクトをオーバーライドしたりできます。

PSR-7のサポート

SlimのHTTPリクエストとレスポンスの抽象化は、PSR-7をサポートします。これは、それらのインターフェースが以前のリリースとは大幅に異なることを意味します。以前は、各Slimアプリケーションには1つのリクエストオブジェクトと1つのレスポンスオブジェクトがあり、アプリケーション全体で参照渡しされていました。

ただし、バージョン3では、リクエストオブジェクトとレスポンスオブジェクトを値オブジェクトとして扱います。各ミドルウェア層とアプリケーションルートは、最新のリクエストオブジェクトとレスポンスオブジェクトを引数として受け取ります。各ミドルウェア層とルートコールバックは、更新されたHTTPレスポンスオブジェクトを返す責任があります。

HTTPリクエストオブジェクトとレスポンスオブジェクトもイミュータブルです。指定された変更で新しいリクエストオブジェクトまたはレスポンスオブジェクトを作成して返すには、適切なwithStatus()withHeader()withBody()などのリクエストオブジェクトメソッドとレスポンスオブジェクトメソッドを使用する必要があります。新しいインターフェースの詳細については、PSR-7ドキュメントのhttps://github.com/php-fig/fig-standards/blob/master/proposed/http-message.mdを参照してください。

これにより、Slim Frameworkでサードパーティのミドルウェアを使用することもできます。たとえば、別のフレームワーク向けに設計されたPSR-7ミドルウェアが見つかったとします。ただし、PSR-7インターフェースを使用しているため、そのミドルウェアはSlimとも互換性があります。

SlimのPSR-7の変更は複雑に聞こえるかもしれませんが、実際には非常に単純です。新しいドキュメントで詳細な情報をすぐに提供します。PSR-7の詳細については、以下を参照してください。

インターフェースへのコーディング

3.0リリースは、すべての内部アプリメソッドが具象クラスの実装ではなくインターフェースを期待するようにコーディングされます。これは、必要に応じてSlimアプリの依存関係に対して独自の実装を簡単に提供でき、Pimpleコンテナサービスを使用して依存関係を注入またはオーバーライドできることを意味します。

ルートコールバックのバインディング

クロージャをルートコールバックルーチンとして使用する場合、クロージャは\Slim\Appインスタンスにバインドされます。これは、$thisキーワードを使用して、クロージャの内部でアプリインスタンスにアクセスできることを意味します。

<?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がより小さく、より直感的で、使いやすくなると考えています。

プルリクエスト

昨年、放置していた未処理のプルリクエストがたくさんあります。申し訳ありませんでした。これらをすぐに整理し、できる限りのものをマージし、残りをクローズします。すべてを使用できるわけではありません。良いものも一部あります。私がイシュートラッカーをより適切に整理できるまで、新しいプルリクエストの送信は控えてください。

ブランチ戦略

Slimは、新しい、よりシンプルなブランチ戦略を採用します。1つのmasterブランチがあります。HEAD参照は、最新の不安定なコードを表します。安定版リリースには、数値バージョン番号(例:3.0.0)がタグ付けされます。

以前は、Git Flowブランチ戦略を使用しようとしましたが、プロジェクトには複雑すぎることが判明し、他の何よりも混乱と混乱を引き起こしました。

現在のmasterブランチはlegacy-2.x(または類似のもの)に名前変更され、現在のdevelopブランチはmasterに名前変更されます。今後のすべての開発は、新たに名前が変更されたmasterブランチで再開されます。この名前の変更は、既存のプルリクエストに支障をきたす可能性があります。もしそうなら、申し訳ありません。しかし、これはプロジェクトの将来と私自身の正気の両方にとって最善の決定です。このブランチ名の変更はまだ行われていませんが、3.0リリースの前に行われます。

ロードマップ

プロジェクトのGitHub Wikiに、新しいロードマップをすぐに確立します。これが利用可能になり次第、発表します。

単体テスト

現在、developブランチの多くの単体テストが壊れています。最近は速く動きすぎていて、物事を壊しています(つまり、開発ブランチです)。これらのテストはすぐに修正されます。