1.6アップグレードガイド

アップグレード前にバックアップを作成してください。以下のコマンドを実行してアップグレードします

composer config -g --unset repos.packagist
composer require -W workerman/webman-framework ^v1.6.11

webman-framework 1.6.0バージョンのリリース

新機能

要求PHP>=8.0

コントローラーのパラメーターを介して入力を取得するサポート

<?php
namespace app\controller;
use support\Response;

class UserController
{
    public function create(string $name, int $age, float $balance, bool $vip, array $extension): Response
    {
        return json([
            'name' => $name,
            'age' => $age,
            'balance' => $balance,
            'vip' => $vip,
            'extension' => $extension,
        ]);
    }
}

/user/create?name=tom&age=18&balance=100.5&vip=1&extension[foo]=barにアクセスすると、次の結果が得られます

{
  "name": "tom",
  "age": 18,
  "balance": 100.5,
  "vip": true,
  "extension": {
    "foo": "bar"
  }
}

同時に、パラメーターはモデルなどのクラスにバインドすることもサポートされています。

<?php
namespace app\controller;
use app\model\User;
class UserController
{
    public function create(User $user): int
    {
        $user->save();
        return $user->id;
    }
}

詳細はコントローラーパラメーターバインディングを参照してください。

コントローラーにミドルウェアをサポート

<?php
namespace app\controller;
use app\middleware\MiddlewareA;
use app\middleware\MiddlewareB;
use support\Request;
class IndexController
{
    protected $middleware = [
        MiddlewareA::class,
        MiddlewareB::class,
    ];
    public function index(Request $request): string
    {
        return 'hello';
    }
}

Route::fallback()->middleware(...); で4xxリクエストにミドルウェアを追加するサポート

通常404リクエストはミドルウェアを経由しませんが、1.6.0バージョンからは4xxリクエストにミドルウェアを設定できます。

Route::fallback(function(){
    return json(['code' => 404, 'msg' => '404 not found']);
})->middleware([
    app\middleware\MiddlewareA::class,
    app\middleware\MiddlewareB::class,
]);

Route::disableDefaultRoute()で特定のアプリケーションやコントローラーのデフォルトルートを無効にするサポート

// メインプロジェクトのデフォルトルートを無効にし、アプリプラグインには影響しません
Route::disableDefaultRoute();
// メインプロジェクトのadminアプリのルートを無効にし、アプリプラグインには影響しません
Route::disableDefaultRoute('', 'admin');
// fooプラグインのデフォルトルートを無効にし、メインプロジェクトには影響しません
Route::disableDefaultRoute('foo');
// fooプラグインのadminアプリのデフォルトルートを無効にし、メインプロジェクトには影響しません
Route::disableDefaultRoute('foo', 'admin');
// コントローラー [\app\controller\IndexController::class, 'index'] のデフォルトルートを無効にします
Route::disableDefaultRoute([\app\controller\IndexController::class, 'index']);

詳細なドキュメントを参照してください。

$request->setGet() $request->setPost() $request->setHeader() メソッドを使用してget post headersデータを上書きするサポート

$request->get(); // 例:結果は ['name' => 'tom', 'age' => 18]
$request->setGet(['name' => 'tom']);
$request->get(); // 最終的に得られるのは ['name' => 'tom']
// 以下も同様
$requset->setPost();
$request->setHeaders();

詳細なドキュメントを参照してください。

view()がテンプレートパラメーターおよび絶対パスを省略することをサポート

<?php
namespace app\controller;
use support\Request;
class UserController
{
    public function hello(Request $request)
    {
        // return view('user/hello', ['name' => 'webman']); と同等
        // return view('/app/view/user/hello', ['name' => 'webman']); と同等
        return view(['name' => 'webman']);
    }
}

その他の設定およびファイルの変更

新しいバージョンでは、config/server.phpのlistenなどの設定がconfig/process.phpに移動しました。これはcomposer create-projectで作成された新しいプロジェクトにのみ影響し、古いプロジェクトのアップグレードには影響しません。
新しいバージョンでは、processディレクトリがapp/processに移動しました。これもcomposer create-projectで作成された新しいプロジェクトにのみ影響し、古いプロジェクトのアップグレードには影響しません。

アップグレードの注意

以前のプロジェクトコードがあまり整備されていない場合、一部の互換性の問題が発生する可能性があります。主な問題は以下の通りです。

view()関数の使用を確認

アップグレードするプロジェクト内のview()が/で始まるテンプレートパラメーターを持っているかどうかを確認し、ある場合は先頭の/を削除します。例えば、

return view('/user/index');
// 改行する必要があります
return view('user/index');

カスタムルートパラメーターが一致しているか確認

Route::any('/user/{name}', function (Request $request, $myname) {
   return response($myname);
});
// 改行する必要があります
Route::any('/user/{name}', function (Request $request, $name) {
   return response($name);
});

注意: $requestパラメーターの前にRequest型のヒントを追加する必要があります。

composerのプロキシを無効にする

アリババクラウドなどのcomposerミラー代理には遅延がある場合があります。中のパッケージのバージョンが最新でない可能性があり、アップグレードに問題が発生する可能性があります。以下のコマンドを実行してcomposerのプロキシを削除し、その後にアップグレードしてください。

composer config -g --unset repos.packagist