バージョン 1.5.2 リリース

Slim Framework v1.5.2 は、新しいアーキテクチャを導入しました。その他にもいくつかの機能が変更および改善されています。これは大規模なアップデートであり、現在はベータ版と見なされています。このバージョンは自己責任でご使用ください。ユーザーが新しいバージョンをアプリケーションで十分に検証する時間を持つまで、開発ブランチに残されます。

更新:以下でバージョン 1.5.2 として説明しているものは、代わりにバージョン 1.6.0 としてタグ付けされます。この変更の詳細については、最近のブログ投稿「バージョン番号」をご覧ください。

以下に示す変更のほとんどは「内部的な」ものです。特に明記されていない限り、パブリックインターフェースはほぼ同じです。バージョン 1.5.2 の新機能については、開発ブランチのドキュメントをお読みになることをお勧めします。

Rackアーキテクチャ

PHP 5 用の Slim Framework は、外見は同じですが、フレームワークはまったく新しい Rack ベースのアーキテクチャを使用しており、Rack プロトコルを完全にサポートしています。

詳細はこちら

環境

アプリケーション環境は Slim_Http_Request クラスから切り離され、Slim_Environment クラスに移動しました。これにより、Slim_Http_Request クラスと Slim_Http_Response クラスは、以前のようなアプリケーション全体のシングルトンではなく、現在の環境の冪等な抽象化になります。 Slim_Environment クラスは、Rack プロトコル仕様で定義されている環境変数を解析し、それらを Slim アプリケーションとそのミドルウェアで使用できるようにします。

詳細はこちら

ミドルウェア

新しい Rack アーキテクチャにより、Slim Framework はミドルウェアをサポートするようになりました。ミドルウェアを使用すると、Slim アプリケーションが呼び出される前後に、現在の環境変数または HTTP リクエスト、あるいはその両方を操作できます。 Slim アプリケーションを玉ねぎのコアと考えてください。鬼のように、玉ねぎには層があります。玉ねぎの各層はミドルウェアです。 Slim アプリケーションの run() メソッドを呼び出すと、最も外側のミドルウェア層が最初に呼び出されます。準備ができたら、そのミドルウェアは、それを囲む次のミドルウェア層(または Slim アプリケーション)を呼び出す役割を担います。このプロセスは、各ミドルウェア層を介して、コアの Slim アプリケーションが呼び出されるまで、玉ねぎのより深い層に進みます。

各ミドルウェアは、`call()` という名前のパブリックインスタンスメソッドを実装します。このメソッドは、現在の環境配列への参照を唯一の引数として受け取ります。 `call()` メソッドは、適切な操作を実行し、オプションでダウンストリームのミドルウェアまたは Slim アプリケーションを呼び出す必要があります。このメソッドは、HTTP ステータス、HTTP ヘッダー、および HTTP ボディの配列を返す必要があります。ステータスは整数です。 HTTP ヘッダーは反復可能なデータ構造です。 Slim_Http_Headers のインスタンスまたは連想配列のいずれかです。ボディは文字列です。

詳細はこちら

テスト

Slim_Http_Request クラスからの環境変数の分離により、Slim アプリケーションのテストもはるかに簡単になりました。 $_SERVER スーパーグローバルから環境変数を解析する Slim_Environment クラスは、代わりに独自の環境変数を定義できる mock() パブリックインスタンスメソッドを提供します。これにより、Slim アプリケーションをテストするためのモック HTTP リクエストを作成できます。

詳細はこちら

HTTP Cookie

以前のバージョンの Slim Framework は、PHP のネイティブ `setcookie()` 関数を使用して、HTTP レスポンスとともに HTTP Cookie を送信していました。バージョン 1.5.2 は独自の実装を使用して `Set-Cookie` ヘッダーを構築し、ミドルウェアがクライアントに配信される前に生のヘッダーを検査および操作する機会を提供します。

バージョン 1.5.2 は独自の基盤となる Cookie 実装を使用しているため、PHP <5.2 を使用しているユーザーは、`Set-Cookie` ヘッダーの「HttpOnly」パラメーターを使用できるようになりました。これは、PHP のネイティブ `setcookie()` メソッドでは不可能でした。

詳細はこちら

セッション

以前のバージョンの Slim Framework では、セッションは万能のアプローチでした。ただし、バージョン 1.5.2 は PHP セッションを自動的に開始しません。 PHP セッションを使用する場合は、PHP セッションを自分で構成して開始する必要があります。

以前のバージョンでは、ハッシュ化され暗号化された HTTP Cookie に保存されるセキュアセッションも提供されていました。この機能は、コアフレームワークからオプションのミドルウェアに抽出されました。 HTTP Cookie に永続化されたセキュアセッションを使用するには、Slim_Middleware_SessionCookie ミドルウェアをアプリケーションに追加します.セキュアセッション Cookie ミドルウェアを使用する場合、`$_SESSION` スーパーグローバルを引き続き使用しますが、ネイティブ PHP セッションを開始する必要はありません。このようにして、アプリケーションコードを変更することなく、ネイティブ PHP セッションとセッション Cookie ミドルウェア間を簡単に移行できます。 Slim_Middleware_SessionCookie ミドルウェアを追加する場合、Cookie の有効期限、パス、ドメイン、セキュア、および httponly の各プロパティと、Cookie 暗号化の暗号、暗号モード、および秘密鍵をオプションで指定できます。これらのプロパティは、Slim アプリケーションの Cookie プロパティとは別です。

詳細はこちら

ロギング

Slim Framework のロギングも以前のバージョンから変更されています。バージョン 1.5.2 では、以前と同じパブリックインスタンスメソッドを実装する Slim_Log クラスがあります

$log = $app->getLog();
$app->debug();
$app->info();
$app->warn();
$app->error();
$app->fatal();

以前のバージョンとは異なり、Slim_Log インスタンスはログライターを使用します。ログライターは、混合引数を受け取り、引数を適切な出力に書き込むパブリック `write()` インスタンスメソッドを実装します。ログライターは、ログメッセージを stderr、ファイル、データベース、Twitter、リモート API、または想像できるあらゆる場所に送信できます。 Slim アプリケーションのロギングをカスタマイズする推奨される方法は、Slim の Slim_Log インスタンスが独自のものを使用する代わりに使用するカスタムログライターを作成することです。 Slim のデフォルトのログライターは、ログに記録されたメッセージを `php://stderr` に送信します。

詳細はこちら

HTTPリクエストとレスポンス

Slim_Http_Request オブジェクトと Slim_Http_Response オブジェクトは、アプリケーション全体のシングルトンではなく、冪等な抽象化になりました。すべての Slim アプリケーションにはデフォルトのリクエストとレスポンスオブジェクトがありますが、フックまたはミドルウェアで自由にインスタンス化して、HTTP リクエストとレスポンスを簡単に作成または変更できます。

これらのクラスは、HTTP リクエストとレスポンスのプロパティをより簡単に検査するのに役立つ多くの新しいヘルパーメソッドも提供するようになりました。利用可能なメソッドを知るには、これら 2 つのクラスのソースコードを調べることをお勧めします。

詳細はこちら

フックとフィルター

ミドルウェアを使用すると、Slim アプリケーションの周囲で操作を実行できます。フックを使用すると、Slim アプリケーション内の特定のポイントで操作を実行できます。フックは以前のバージョンとまったく同じように機能します。ただし、バージョン 1.5.2 ではフィルターが削除されます。フィルターインフラストラクチャは以前のバージョンで実装されていましたが、デフォルトのフィルターが作成または使用されることはありませんでした。フィルターは、Slim ミドルウェアの導入により、ほとんど廃止されました。 HTTP リクエストまたはレスポンスのプロパティをフィルタリングする必要がある場合は、ミドルウェアで行います。

詳細はこちら

テストカバレッジ

ほとんどのユニットテストは、新しい Rack アーキテクチャに対応するために、モック環境を使用して書き直されました。モック環境は、テストカバレッジを約 98% に向上させるのに役立ちました。これは今後も改善されていきます。