【Laravel Prompts】使い方(pause/info/table/spin/progress)

Laravel

Laravel11の公式パッケージ Prompts の使い方の記録と解説の第3回です。

Laravel - The PHP Framework For Web Artisans
Laravel is a PHP web application framework with expressive, elegant syntax. We’ve already laid the foundation — freeing ...

前回はピュアPHPでpassword、confirm、select、multiselectのプロンプトを実装しました。

今回はピュアPHPでpause、info、table、spin、progressを実装していきます。

pauseの使い方

pauseはテキストを表示して[Enter]の入力待ち状態にするプロンプトです。

▼PHPコード(src/pause.php)

<?php

require_once(__DIR__ . '/../vendor/autoload.php');

use function Laravel\Prompts\pause;

pause('続けるには ENTER キーを押してください。');

echo "ENTER キーが押されました。\n";

▼実行結果

テキストが表示され、入力待ち状態になります。

[Enter]キーを押すと処理続行されます。

infoの使い方

infoは情報的メッセージを表示する関数です。

情報表示系関数として他にも

  • note(メモ)
  • warning(警告)
  • error(エラー)
  • alert(注意)

があるので同時に実装します。

※2024/04/14追記:

「vendor/laravel/prompts/src/helpers.php」

に利用可能なPromptsの関数が列記されていますが、

公式ドキュメントに記載されていない

  • intro(導入)
  • outro(終結)

があったので同時に実装します。

▼PHPコード(src/info.php)

<?php

require_once(__DIR__ . '/../vendor/autoload.php');

use function Laravel\Prompts\note;
use function Laravel\Prompts\info;
use function Laravel\Prompts\warning;
use function Laravel\Prompts\error;
use function Laravel\Prompts\alert;
use function Laravel\Prompts\intro;
use function Laravel\Prompts\outro;

note('noteです。');
info('infoです。');
warning('warningです。');
error('errorです。');
alert('alertです。');
intro('introです。');
outro('outroです。');

▼実行結果

それぞれ色違いで表示されました。

tableの使い方

tableは表を表示する関数です。

▼PHPコード(src/table.php)

<?php

require_once(__DIR__ . '/../vendor/autoload.php');

use function Laravel\Prompts\table;

table(
    ['#', 'ぶき', 'ねだん'], // 見出し
    [ // データ
        ['1', 'ひのきのぼう', '10G'],
        ['2', 'たけのやり', '50G'],
        ['3', 'くだものナイフ', '50G'],
        ['4', 'ブロンズナイフ', '150G'],
        ['5', 'いしのキバ', '240G'],
        ['6', 'どうのつるぎ', '270G'],
    ],
);

▼実行結果

表が表示されました。

table関数の第二引数には、Laravelのモデルの検索結果を渡すこともできます。

spinの使い方

spinは処理実行中にスピンアニメーションをテキストで表示させる関数です。

▼PHPコード(src/spin.php)

<?php

require_once(__DIR__ . '/../vendor/autoload.php');

use function Laravel\Prompts\spin;

$response = spin(
    fn () => sleep(3),
    '処理中です。'
);

▼実行結果

progressの使い方

progressは進捗状況を表すプログレスバーを表示させる関数です。

▼基本的な使い方

<?php

require_once(__DIR__ . '/../vendor/autoload.php');

use function Laravel\Prompts\progress;

$users = progress(
    label: '処理中です。',
    steps: ['hoge', 'fuga', 'piyo'],
    callback: function ($user) {
        sleep(1);
        return "{$user}さんは登録完了しました。";
    },
);

▼実行結果

▼処理中のラベルと補足説明の更新

$users = progress(
    label: '処理中です。',
    steps: [
        ['name' => 'hoge', 'country' => '日本'],
        ['name' => 'fuga', 'country' => 'ドイツ'],
        ['name' => 'piyo', 'country' => 'イタリア'],
    ],
    hint: '登録準備中です。',
    callback: function ($user, $progress) {
        $progress->label("処理中:{$user['name']}さんの登録中です。")
                 ->hint("{$user['country']}政府に照会しています。");
        sleep(1);
        return "{$user['name']}さんは登録完了しました。";
    },
);

▼実行結果

▼独自処理で進捗を進める方法

<?php

require_once(__DIR__ . '/../vendor/autoload.php');

use function Laravel\Prompts\progress;

$users = [
        ['name' => 'hoge', 'country' => '日本'],
        ['name' => 'fuga', 'country' => 'ドイツ'],
        ['name' => 'piyo', 'country' => 'イタリア'],
];
$progress = progress(
    label: '処理中です。',
    steps: count($users),
    hint: '登録準備中です。',
);
$results = [];

$progress->start();
foreach ($users as $user) {
    $progress->label("処理中:{$user['name']}さんの登録中です。")
             ->hint("{$user['country']}政府に照会しています。");
    sleep(1);
    $results[] = "{$user['name']}さんは登録完了しました。";
    $progress->advance();
}
$progress->finish();
var_dump($results);

▼実行結果

今回は以上です。

次回はsearch、multisearchを実装していきます。

コメント

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