Laravel11の公式パッケージ Prompts の使い方の記録と解説の第6回です。
![](https://laravel.com/img/og-image.jpg)
前回はピュアPHPでtextareaを実装しました。
今回はピュアPHPでsuggestを実装していきます。
基本的な使い方
suggestは、textとselectを組み合わせたような機能です。
textの入力欄に加えて、予め提案された選択肢から選択入力することも可能です。
▼基本的な使い方(src/suggest.php)
<?php
require_once __DIR__ . '/../vendor/autoload.php';
use function Laravel\Prompts\suggest;
$name = suggest(
'あなたの名前を入力してください。',
[
'ななし はらぺこ',
'ななし とおりすがり',
'ななし けいびいん',
]
);
var_dump($name);
▼実行結果
入力欄の右下にプルダウンの矢印が表示されています。
![](https://macocci7.net/blog/wp-content/uploads/2024/04/laravel11_prompts_purephp_suggest_01.png)
[↓]キーを押すと提案リストが表示されます。
![](https://macocci7.net/blog/wp-content/uploads/2024/04/laravel11_prompts_purephp_suggest_02.png)
[↓][↑]で選択して[Enter]で確定します。
※[Escape]でキャンセルできます。
![](https://macocci7.net/blog/wp-content/uploads/2024/04/laravel11_prompts_purephp_suggest_03.png)
選択した内容が文字列として渡されました。
選択肢へのClosure適用
「options:」にClosureを適用することで、入力に応じた処理結果を選択肢とすることができます。
▼入力値を含む提案選択肢
$name = suggest(
'あなたの名前を入力してください。',
fn ($value) => collect([
'ななし はらぺこ',
'ななし とおりすがり',
'ななし けいびいん',
])->filter(
fn ($name) => str_contains(strtoupper($name), strtoupper($value))
),
);
※公式ドキュメントでは「->toArray()」を付けていませんが、現時点では「TypeError」となってしまいます。
※公式には「Illuminate\Support\Collection」も受け付ける設計のようです。
※2024/04/14執筆時点で修正Pull Requestを提出中でまだマージ&リリースされていないので、配列を返すように「->toArray()」を付けています。
※2024/04/17にsuggestのバグ修正がv0.1.19としてリリースされました。
▼実行結果
はじめは基本的な使い方と同じ表示です。
![](http://macocci7.net/blog/wp-content/uploads/2024/04/laravel11_prompts_purephp_suggest_01.png)
名前を途中まで入力すると、あいまい検索でマッチした選択肢が下に表示され、選択できるようになります。
![](https://macocci7.net/blog/wp-content/uploads/2024/04/laravel11_prompts_purephp_suggest_04.png)
この辺は、searchと同じような動きですね。
適当に選択して確定します。
![](https://macocci7.net/blog/wp-content/uploads/2024/04/laravel11_prompts_purephp_suggest_05.png)
選択した内容が返されました。
プレイスホルダー、デフォルト、補足説明
▼プレイスホルダー、デフォルト、補足説明
$name = suggest(
label: 'あなたの名前を入力してください。',
options: fn ($value) => collect([
'ななし はらぺこ',
'ななし とおりすがり',
'ななし けいびいん',
])->filter(
fn ($name) => str_contains(strtoupper($name), strtoupper($value))
)->toArray(),
placeholder: 'へのへの もへじ',
default: 'ななし',
hint: 'これはプロフィールで表示されます。',
);
▼実行結果
デフォルトの「ななし」が表示され、あいまい検索結果が選択肢として表示されています。
![](https://macocci7.net/blog/wp-content/uploads/2024/04/laravel11_prompts_purephp_suggest_06.png)
[Back space]で全て消去すると、プレイスホルダーが表示されます。
![](https://macocci7.net/blog/wp-content/uploads/2024/04/laravel11_prompts_purephp_suggest_07.png)
必須設定
▼必須設定
$name = suggest(
label: 'あなたの名前を入力してください。',
options: fn ($value) => collect([
'ななし はらぺこ',
'ななし とおりすがり',
'ななし けいびいん',
])->filter(
fn ($name) => str_contains(strtoupper($name), strtoupper($value))
)->toArray(),
placeholder: 'へのへの もへじ',
default: '',
hint: 'これはプロフィールで表示されます。',
required: '名前の入力は必須です。',
);
▼実行結果
何も入力しないで確定すると叱られます。
![](https://macocci7.net/blog/wp-content/uploads/2024/04/laravel11_prompts_purephp_suggest_08.png)
バリデーション
▼バリデーション
$name = suggest(
label: 'あなたの名前を入力してください。',
options: fn ($value) => collect([
'ななし はらぺこ',
'ななし とおりすがり',
'ななし けいびいん',
])->filter(
fn ($name) => str_contains(strtoupper($name), strtoupper($value))
)->toArray(),
placeholder: 'へのへの もへじ',
default: '',
hint: 'これはプロフィールで表示されます。',
required: '名前の入力は必須です。',
validate: fn ($value) => match (true) {
mb_strlen($value) < 3 => '3文字以上で入力してください。',
mb_strlen($value) > 40 => '40文字以内で入力してください。',
default => null,
}
);
▼実行結果
3文字未満で確定すると叱られます。
![](https://macocci7.net/blog/wp-content/uploads/2024/04/laravel11_prompts_purephp_suggest_09.png)
40文字を超えても叱られます。
![](https://macocci7.net/blog/wp-content/uploads/2024/04/laravel11_prompts_purephp_suggest_10.png)
今回は以上です。
次回はForms(form)をピュアPHPで実装していきます。
コメント