Slim 4.0.0 リリース
Slim 4.0.0 のリリースを発表できることを嬉しく思います。このリリースに関するフィードバックはすべて、Slim 4 リリースフィードバックスレッドにお寄せください。新しいドキュメントはこちらにあります。
サポートされている PSR-7 実装 CI ステータス
注: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
コンポーネントは、RouteCollectorInterface
、RouteParserInterface
、RouteResolverInterface
、DispatcherInterface
の 4 つのインターフェースに分割されました。- ダブルパスミドルウェアは非推奨になりました。ミドルウェアのシグネチャは現在、PSR-15
MiddlewareInterface
シグネチャprocess(Request $request, RequestHandler $handler)
です。ダブルパスfunction ($request, $response, $next)
シグネチャはサポートされなくなりました。シグネチャfunction (Request $request, RequestHandler $handler) {}
を持つ呼び出し可能オブジェクトを使用してミドルウェアを作成したり、そのシグネチャを持つ呼び出し可能クラスを使用したりすることは可能です。 - Slim
App
は現在、PSR-15RequestHandlerInterface
を実装しています。$app($request)
ではなく$app->handle($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()
を使用する場合、リクエストメソッド名は現在大文字と小文字が区別されます。 - すべてのトレイトが削除されました。
CallableResolverTrait
とMiddlewareAwareTrait
は存在しなくなりました。 - 2 つの新しいファクトリが導入されました。
AppFactory
とServerRequestCreatorFactory
は、App
とServerRequest
の作成を容易にします。現在、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 内部ミドルウェア
ErrorMiddleware
とRoutingMiddleware
のキューイングを簡素化 - #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-7 と Nyholm PSR-7 Server
composer require nyholm/psr7 nyholm/psr7-server
Guzzle PSR-7 と Guzzle 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