Laravel11の公式パッケージ Prompts の使い方の記録と解説の第8回です。
前回は、ピュアPHPでformを実装しました。
今回は、 ピュアPHPで、Prompts のバリデーションに
![](https://laravel.com/img/og-image.jpg)
purephp-validation を適用してみます。
purephp-validationで何ができるのか
purephp-validation は、
Laravel の Validator のラッパーです。
詳細はこちら
Laravel の Validator のメリットは、
短いコードで素早く楽に設定・利用可能、挙動変更も楽!
いちいち Validator クラスを機能毎に作る必要なし!
といったところでしょうか。
Taylor氏の口癖「Super Easy!」ってやつですね。
例えば、Laravelフレームワーク内で利用する場合、
これだけでバリデーションできてしまいます。
$name = text(
label: 'What is your name?',
validate: ['name' => 'required|max:255|unique:users,name']
);
ところが、ピュアPHPで Laravel Prompts だけをインストールしている状態では、
Laravel の Validator がインストールされていないため、
このまま実行すると Fatal Errorとなります。
PHP Fatal error: Uncaught RuntimeException: The validation logic is missing.
purephp-validationを利用することで、
Laravel の Validator を利用できるようになります。
上記の例では、「name」の値に対して、
必須、最長255バイト、テーブル内でユニーク、
であるかの検証を行います。
Laravel の Validator の詳細は公式を参照してください。
![](https://laravel.com/img/og-image.jpg)
purephp-validationインストール
ピュアPHPで Laravel の Validator を使えるようにするライブラリ purephp-validation をインストールします。
composer require macocci7/purephp-validation
![](https://macocci7.net/blog/wp-content/uploads/2024/05/laravel11_purephp_validation_01.png)
Promptsと併せて使ってみる
▼PHP(src/purephp-validation.php)
<?php
require_once __DIR__ . '/../vendor/autoload.php';
use Macocci7\PurephpValidation\ValidatorFactory as Validator;
use function Laravel\Prompts\form;
// バリデーションメッセージの言語指定
// - 'en': 英語(デフォルト)
// - 'ja': 日本語
Validator::lang('ja');
// バリデーターのコールバックを定義
$validator = function (string $value, array $rules): string|null {
$key = array_keys($rules)[0];
$data = [$key => $value];
$v = Validator::make($data, $rules);
if ($v->fails()) {
return implode(
'',
array_map(
fn ($e) => implode('', $e),
$v->errors()->messages()
)
);
}
return null; // なくても動くことは動く
};
// 入力
$input = form()
->text(
label: 'あなたの名前を入力してください。',
placeholder: 'ららべる ぷろんぷと',
name: 'name',
validate: fn ($value) => $validator($value, [
'name' => 'required|string|min:3|max:20',
]),
)
->text(
label: 'あなたのメールアドレスを入力してください。',
placeholder: 'hoge@example.com',
name: 'email',
validate: fn ($value) => $validator($value, [
'email' => 'required|string|email:rfc,dns',
]),
)
->submit();
// 結果出力
var_dump($input);
バリデーションルールは、
「name」→ 必須、文字列、最低3文字、最高20文字
「email」→ 必須、文字列、email(RFCチェック + DNSチェック)
バリデーションメッセージの出力は日本語です。
▼実行結果
名前の入力欄が表示されました。
![](https://macocci7.net/blog/wp-content/uploads/2024/05/laravel11_purephp_validation_02.png)
何も入力せずにそのまま[Enter]で確定してみます。
![](https://macocci7.net/blog/wp-content/uploads/2024/05/laravel11_purephp_validation_03.png)
叱られましたね。
全角2文字(UTF-8:6bytes)だけ入力して[Enter]で確定してみます。
![](https://macocci7.net/blog/wp-content/uploads/2024/05/laravel11_purephp_validation_04.png)
叱られましたね。
21文字入力して[Enter]で確定してみます。
![](https://macocci7.net/blog/wp-content/uploads/2024/05/laravel11_purephp_validation_05.png)
叱られましたね。
3文字以上、20文字以内で入力確定してみます。
![](https://macocci7.net/blog/wp-content/uploads/2024/05/laravel11_purephp_validation_06.png)
emailの入力欄が表示されました。
何も入力しないで確定してみます。
![](https://macocci7.net/blog/wp-content/uploads/2024/05/laravel11_purephp_validation_07.png)
叱られましたね。
不正なメールアドレスを入力して確定してみます。
![](https://macocci7.net/blog/wp-content/uploads/2024/05/laravel11_purephp_validation_08.png)
![](https://macocci7.net/blog/wp-content/uploads/2024/05/laravel11_purephp_validation_09.png)
![](https://macocci7.net/blog/wp-content/uploads/2024/05/laravel11_purephp_validation_10.png)
![](https://macocci7.net/blog/wp-content/uploads/2024/05/laravel11_purephp_validation_11.png)
DNSチェックまでしているので、存在しないドメインでは叱られます。
存在するドメインで入力確定してみましょう。
![](https://macocci7.net/blog/wp-content/uploads/2024/05/laravel11_purephp_validation_12.png)
無事、バリデーションを通過し、入力内容が出力されました。
以上です。
コメント