【Laravel11】Artisanコマンドのバグ修正がリリースされました(11.3.0)

Laravel

2024/04/05にマージされたArtisanコマンドのバグ修正PRが、laravel/framework (v11.3.0) に含まれてリリースされました。

Contributorsの一覧に表示されました。

バグ修正の内容は以前の記事に記載されています。

新規プロジェクト作成

まずは新規プロジェクトを作成します。

composer create-project laravel/laravel:^11 artisan-11.2.0

laravel/framework (v11.3.0)がインストールされているので、一旦削除してから(v11.2.0)をインストールします。

まずはプロジェクトフォルダに入ります。

cd artisan-11.2.0

larave/framework (11.3.0) を一旦削除します。

まっとうに「composer remove」を実行するとエラーになります。

少し邪道な方法ですが、rmコマンドで削除します。

rm -rf vendor/laravel/framework

laravel/framework (11.2.0) をインストールします。

composer require laravel/framework:11.2.0

Artisanコマンド作成

バグ修正が適用される前のLaravel11.2.0でバグの内容を確認してみます。

Artisanコマンドを作成します。

php artisan make:command Foo

「app/Console/Commands/Foo.php」が作成されました。

このファイルを編集・保存します。

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Illuminate\Contracts\Console\PromptsForMissingInput;

use function Laravel\Prompts\multiselect;

class Foo extends Command implements PromptsForMissingInput
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'app:foo {args*}';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Command description';

    /**
     * Execute the console command.
     */
    public function handle()
    {
        var_dump($this->argument('args'));
    }

    /**
     * Prompt for missing input arguments using the returned questions.
     *
     * @return array<string, string>
     */
    protected function promptForMissingArgumentsUsing(): array
    {
        return [
            'args' => fn () => multiselect(
                label: 'ユーザーを選択してください。',
                hint: '複数のユーザーを選択できます。',
                options: ['foo', 'bar', 'baz'],
            ),
        ];
    }
}

バグの確認(v11.2.0)

配列引数の設定をしたartisanコマンドで引数を省略実行した際、

promptsForMissingArgumentsUsing()を実装しても機能しません。

php artisan app:foo

引数省略実行したら叱られました。

バグ修正の確認(v11.3.0)

Laravel11.3.0でバグ修正が適用されているか確認します。

先程と同様の手順でlaravel/framework (11.3.0) をインストールし直します。

まずは laravel/frameworkを削除します。

rm -rf vendor/laravel/framework

laravel/framework (11.3.0) をインストールします。

composer require laravel/framework:11.3.0

先程作成したArtisanコマンドを実行します。

php artisan app:foo

multiselectのプロンプトが表示されました。

適当に選択して確定します。

選択した内容が配列として返されました。

バグ修正の内容がしっかり反映されていました。

以上です。

コメント

タイトルとURLをコピーしました