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 を介して行われます。デフォルトでは、ルーティングはミドルウェアキューの最後に実行されます。$requestroute 属性と routingResults 属性にアクセスする場合は、このミドルウェアを最後​​に追加する必要があります。アプリを実行すると、このミドルウェアがキュー内で最初に実行されます。ミドルウェアキューは依然として Last In First Out (LIFO) の順序で実行されます。これにより、determineRouteBeforeAppMiddleware 設定が置き換わります。
  • 出力バッファリングは Slim\Middleware\OutputBufferingMiddleware を介して行われます。これにより、outputBuffering 設定が置き換わります。
  • コンテンツの長さのヘッダーの計算は Slim\Middleware\ContentLengthMiddleware を介して行われます。これにより、addContentLengthHeader 設定が置き換わります。
  • RouterInterface コンポーネントは 4 つのインターフェース RouteCollectorInterfaceRouteParserInterfaceRouteResolverInterfaceDispatcherInterface に分割されました。
  • ダブルパスミドルウェアは非推奨になりました。ミドルウェアシグネチャは 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 をルート呼び出し可能として使用できます。
  • $appRouteGroup 呼び出し可能なバインディングは削除されました。代わりに、 RouteCollectorProxyRouteGroup の呼び出し可能な部分に挿入されます。$app->group('/group', function (RouteCollectorProxy $group) { $group->get(...); }
  • App::subRequest() メソッドは削除されました。ルート呼び出し可能から $app->handle($request) でサブリクエストを実行できます。
  • SlimException が削除されました。新しい HttpException が実装されました。具体的には HttpBadRequestExceptionHttpForbiddenExceptionHttpInternalServerErrorExceptionHttpMethodNotAllowedExceptionHttpNotFoundExceptionHttpNotImplementedExceptionHttpUnauthorizedException です。また、HttpException または HttpSpecializedExceptionを拡張して独自の例外を作成することもできます。
  • ユーザが App::map() を使用するときのリクエストメソッド名は、現在は大文字と小文字が区別されます。
  • すべてのトレイトは削除されました。CallableResolverTraitMiddlewareAwareTrait はもうありません。
  • 2 つの新しいファクトリが導入されました。AppFactoryServerRequestCreatorFactory です。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 $thisRouteGroupの呼び出し可能オブジェクトの関連付けを削除しました。
  • #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 $thisgroup() へのバインディングを削除

修正済み

  • #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 スタイルのディレクトリ構造、サンプルファイル、テストカバレッジを備えた app スケルトンを作成しました。これは非常にこだわりが強く、スケルトンに適しているかどうかはまだ確信がありませんが、フィードバックをいただければと思います。スケルトンをクローンして試すことができます。

git clone https://github.com/l0gicgate/Slim-Skeleton.git
git checkout 4.x