Laravel11の公式パッケージ Prompts の使い方の記録と解説の第3回です。
![](https://laravel.com/img/og-image.jpg)
前回はピュア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";
▼実行結果
テキストが表示され、入力待ち状態になります。
![](https://macocci7.net/blog/wp-content/uploads/2024/04/laravel11_prompts_purephp_pause_01.png)
[Enter]キーを押すと処理続行されます。
![](https://macocci7.net/blog/wp-content/uploads/2024/04/laravel11_prompts_purephp_pause_02.png)
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です。');
▼実行結果
それぞれ色違いで表示されました。
![](http://macocci7.net/blog/wp-content/uploads/2024/04/laravel11_prompts_purephp_pause_03.png)
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'],
],
);
▼実行結果
表が表示されました。
![](https://macocci7.net/blog/wp-content/uploads/2024/04/laravel11_prompts_purephp_pause_04.png)
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を実装していきます。
コメント