Slim 4.0.0-alpha リリース
Slim 4.0.0 アルファリリースをお知らせいたします。このリリースに対するフィードバックはすべて Slim 4 Alpha リリースフィードバックスレッド にお寄せください。新しいドキュメントはこちらにあります こちら。
一般的な方向性
このメジャーリリースでは、次の事項に重点が置かれました。
- 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
属性にアクセスする場合は、このミドルウェアを最後に追加する必要があります。アプリを実行すると、このミドルウェアがキュー内で最初に実行されます。ミドルウェアキューは依然として Last In First Out (LIFO) の順序で実行されます。これにより、determineRouteBeforeAppMiddleware
設定が置き換わります。 - 出力バッファリングは
Slim\Middleware\OutputBufferingMiddleware
を介して行われます。これにより、outputBuffering
設定が置き換わります。 - コンテンツの長さのヘッダーの計算は
Slim\Middleware\ContentLengthMiddleware
を介して行われます。これにより、addContentLengthHeader
設定が置き換わります。 RouterInterface
コンポーネントは 4 つのインターフェースRouteCollectorInterface
、RouteParserInterface
、RouteResolverInterface
、DispatcherInterface
に分割されました。- ダブルパスミドルウェアは非推奨になりました。ミドルウェアシグネチャは PSR-15 の
MiddlewareInterface
シグネチャprocess(Request $request, RequestHandler $handler)
です。ダブルパスのfunction ($request, $response, $next)
シグネチャはサポートされなくなりました。シグネチャfunction (Request $request, RequestHandler $handler) {}
の呼び出し可能を使用するか、そのシグネチャを持つ呼び出し可能クラスを使用して、ミドルウェアを作成できます。 - 軽量の
App
は、PSR-15 のRequestHandlerInterface
を実装します。$app->handle($request)
を$app($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
の作成を容易にします。現在、4 つの PSR-7/ServerRequest 作成者の組み合わせ(Slim-Psr7、Nyholm PSR-7 と Nyholm PSR-7 サーバ、Guzzle PSR-7 と Guzzle HTTP Factory、Zend-Diactoros)をサポートしています。
変更ログ
追加
- #2642 PSR-7 の実装および ServerRequest 作成者の自動検出をする
AppFactory
を追加しました。 - #2641 アプリのルートマッピング機能を独自のインターフェイスに抽出する
RouteCollectorProxyInterface
を追加しました。 - #2640
RouteParserInterface
を追加し、FastRoute ルートパーサーを完全にコアから切り離しました。メソッドrelativePathFor()
、urlFor()
、fullUrlFor()
は現在、このインターフェイスにあります。 - #2639
DispatcherInterface
を追加し、FastRoute ディスパッチャを完全にコアから切り離しました。これにより、他のルーターの実装とルーターの実装を入れ替えられます。 - #2638 完全修飾 URL を生成する
RouteCollector::fullUrlFor()
を追加しました - #2634 ルートごとに呼び出し戦略を設定する機能を追加しました。
$app->get(...)->setInvocationStrategy($strategy)
- #2555 PSR-15 ミドルウェアサポートの追加
- #2529 Slimは、PSR-7の実装に依存しなくなりました。Slimを実行するには、PSR-7 ServerRequestとPSR-17 ResponseFactoryが必要です。
- #2507
Router::map()
のメソッド名は、大文字と小文字が区別されるようになりました。したがって、拡張機能としてApp::map()でも区別されるようになりました。 - #2497 PSR-15 RequestHandlersを、ルーティング呼び出し可能として使用できるようになりました。
- #2496 SlimAppを、PSR-15 Request Handlerとして使用できるようになりました。
- #2405
RoutingMiddleware
は、ルーティングの結果を保持するroutingResults
リクエスト属性を追加しました。 - #2404 Slim4には、PHP 7.1以降が必要です。
- #2425
$app->redirect()
が追加されました。 - #2398
Middleware\ErrorMiddleware
が追加されました。 - #2329
Middleware\MethodOverrideMiddleware
が追加されました。 - #2288 ルーティングとディスパッチングを分離しました。
- #2254
Middleware\ContentLengthMiddleware
が追加されました。 - #2166
Middleware\OutputBufferingMiddleware
が追加されました。
非推奨
- #2654
RouteParser::pathFor()
とRouteParser::relativePathFor()
は非推奨となりました。RouteParser::urlFor()
とRouteParser::relativeUrlFor()
を使用してください。 - #2641
RouteCollector::pushGroup()
、RouteCollector::popGroup()
は非推奨となり、RouteCollector::group()
に置き換わりました。 - #2638
RouteCollector::pathFor()
は非推奨となり、RouteCollector::urlFor()
に置き換わり、元の機能は維持されます。 - #2589
App::$settings
を削除しました。 - #2560
$this
とRouteGroup
の呼び出し可能オブジェクトの関連付けを削除しました。 - #2555 二重パスのミドルウェアのサポートは非推奨となりました。
削除
- #2612 ルーティング可能を削除し、RouteGroupとRouteインターフェイスをリファクタリングしました。
- #2589
App::$settings
を完全に削除しました。 - #2587 開発依存関係としてのPimpleを削除しました。
- #2398 Slimは、Appに組み込まれたエラー処理機能を備えていません。
Slim\Middleware\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 コンテナを削除した
- #2560
$this
のgroup()
へのバインディングを削除
修正済み
- #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 スタイルのディレクトリ構造、サンプルファイル、テストカバレッジを備えた app スケルトンを作成しました。これは非常にこだわりが強く、スケルトンに適しているかどうかはまだ確信がありませんが、フィードバックをいただければと思います。スケルトンをクローンして試すことができます。
git clone https://github.com/l0gicgate/Slim-Skeleton.git
git checkout 4.x