Slim 4.0.0 リリース

Slim 4.0.0 のリリースを発表できることを嬉しく思います。このリリースに関するフィードバックはすべて、Slim 4 リリースフィードバックスレッドにお寄せください。新しいドキュメントはこちらにあります。

Build Status Coverage Status

サポートされている PSR-7 実装 CI ステータス

  • Slim Slim PSR-7
  • Nyholm Nyholm
  • Guzzle Guzzle
  • Zend Zend

注:Travis-CI は、少なくとも 24 時間ごとに自動的にトリガーされるように構成されています。

全体的な方向性

このメジャーリリースでは、以下のことに重点を置きました。

  • PSR-15 ミドルウェアサポートの実装
  • Slim の PSR-7 実装への依存性の切り離し、および任意の PSR-7 実装の使用の有効化
  • Pimple への依存性の切り離し、および任意の PSR-11 ContainerInterface 実装の使用の有効化
  • FastRoute への依存性の切り離し、およびユーザーが任意のルーティングライブラリを使用できるようにするインターフェースの実装
  • エラー処理のコアからの切り離し、およびユーザーが独自の容易に実装を使用できるようにすること
  • レスポンス出力のコアからの切り離し、およびユーザーが独自の容易に実装を使用できるようにすること
  • デバッグ時のよりクリーンなコールスタックトレースのために、すべてのトレイトを削除
  • モジュール性の向上による複雑さの増大のため、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 コンポーネントは、RouteCollectorInterfaceRouteParserInterfaceRouteResolverInterfaceDispatcherInterface の 4 つのインターフェースに分割されました。
  • ダブルパスミドルウェアは非推奨になりました。ミドルウェアのシグネチャは現在、PSR-15 MiddlewareInterface シグネチャ process(Request $request, RequestHandler $handler) です。ダブルパス function ($request, $response, $next) シグネチャはサポートされなくなりました。シグネチャ function (Request $request, RequestHandler $handler) {} を持つ呼び出し可能オブジェクトを使用してミドルウェアを作成したり、そのシグネチャを持つ呼び出し可能クラスを使用したりすることは可能です。
  • Slim App は現在、PSR-15 RequestHandlerInterface を実装しています。$app($request) ではなく $app->handle($request) を使用してください。
  • PSR-15 RequestHandler は、ルートの呼び出し可能オブジェクトとして使用できるようになりました。
  • $appRouteGroup 呼び出し可能オブジェクトへのバインディングは削除されました。RouteCollectorProxy が代わりに RouteGroup の呼び出し可能オブジェクトに挿入されます。$app->group('/group', function (RouteCollectorProxy $group) { $group->get(...); }
  • App::subRequest() メソッドは削除されました。ルートの呼び出し可能オブジェクト内から $app->handle($request) を使用してサブリクエストを実行できます。
  • SlimException が削除されました。新しい HttpException が実装されました。具体的には、HttpBadRequestExceptionHttpForbiddenExceptionHttpInternalServerErrorExceptionHttpMethodNotAllowedExceptionHttpNotFoundExceptionHttpNotImplementedExceptionHttpUnauthorizedException です。HttpException または HttpSpecializedException を拡張して独自の例外を作成することもできます。
  • ユーザーが App::map() を使用する場合、リクエストメソッド名は現在大文字と小文字が区別されます。
  • すべてのトレイトが削除されました。CallableResolverTraitMiddlewareAwareTrait は存在しなくなりました。
  • 2 つの新しいファクトリが導入されました。AppFactoryServerRequestCreatorFactory は、AppServerRequest の作成を容易にします。現在、Slim-Psr7、Nyholm PSR-7 および Nyholm PSR-7 Server、Guzzle PSR-7 および Guzzle HTTP Factory、Zend-Diactoros の 4 つの PSR-7/ServerRequest クリエイターの組み合わせをサポートしています。


変更ログ

4.0.0 - 2019-08-01

追加

  • #2765 内部ミドルウェア ErrorMiddlewareRoutingMiddleware のキューイングを簡素化
  • #2759 現在のルート、ルートパーサー、およびルーティング結果へのアクセスを有効にする RouteContext の追加
  • #2751 ErrorHandler コンポーネントでデフォルトのエラーレンダラーのコンテンツタイプを設定する機能の追加
  • #2737 ErrorRendererInterface を介した BC 変更は、CallableResolver を活用するために呼び出し可能パターンを使用するように変更されました
  • #2734 コンテンツタイプベースのエラーレンダラーとデフォルトのエラーレンダラーの設定のサポートを追加
  • #2716 ライブラリがスコープ内にある場合に、Slim-Http リクエスト/レスポンスの自動装飾を追加
  • #2654 RouteParser::pathFor()RouteParser::relativePathFor() は非推奨になりました。RouteParser::urlFor()RouteParser::relativeUrlFor() を使用してください
  • #2642 PSR-7 実装と ServerRequest クリエイターの自動検出を有効にする AppFactory の追加
  • #2641 アプリケーションから独自のインターフェースへのすべてのルートマッピング機能を抽出する RouteCollectorProxyInterface の追加
  • #2640 RouteParserInterface の追加と、FastRoute ルートパーサーのコアからの完全な切り離し。メソッド relativePathFor()urlFor()fullUrlFor() は、このインターフェースに配置されました。
  • #2639 DispatcherInterface の追加と、FastRoute ディスパッチャーのコアからの完全な切り離し。これにより、ルーターの実装を他のルーターに交換できます。
  • #2638 完全修飾 URL を生成する機能を提供する RouteCollector::fullUrlFor() の追加
  • #2634 ルートごとに呼び出し戦略を設定する機能を追加
  • #2555 PSR-15 ミドルウェアサポートを追加
  • #2529 Slim は PSR-7 実装を同梱しなくなりました。Slim を実行するには、PSR-7 ServerRequest と PSR-17 ResponseFactory を提供する必要があります。
  • #2507 Router::map() のメソッド名は、拡張により App::map() でも大文字と小文字が区別されるようになりました。
  • #2497 PSR-15 RequestHandler は、ルートの呼び出し可能オブジェクトとして使用できるようになりました。
  • #2496 Slim アプリケーションは、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 Routable を削除、RouteGroup と Route インターフェースをリファクタリング
  • #2589 App::$settings を完全に削除
  • #2587 開発依存関係として Pimple を削除
  • #2398 Slim は、App に組み込まれたエラー処理を廃止しました。ErrorMiddleware() を最外側のミドルウェアとして追加してください。
  • #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 コンテナの削除。 App::setContainer() を使用して独自に設定してください。
  • #2560 group()への $this のバインディングの削除

変更点

  • #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 実装を選択する必要があります。自動検出を機能させ、ServerRequest を手動で作成することなく AppFactory::create()App::run() を使用できるようにするには、次の実装のいずれかをインストールする必要があります。

Slim PSR-7

composer require slim/psr7

Nyholm PSR-7Nyholm PSR-7 Server

composer require nyholm/psr7 nyholm/psr7-server

Guzzle PSR-7Guzzle 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


Slim 4 MVC スキャフォールド

@adriansuter は MVC スキャフォールドを作成しました。スキャフォールドをクローンして試用できます。

git clone https://github.com/adriansuter/Slim4-Skeleton.git