【Laravel Prompts】purephp-validationでバリデーション

Laravel

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

前回は、ピュアPHPでformを実装しました。

今回は、 ピュアPHPで、Prompts のバリデーションに

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 ...

purephp-validation を適用してみます。

GitHub - macocci7/purephp-validation: illuminate/validation wrapper for pure php
illuminate/validation wrapper for pure php. Contribute to macocci7/purephp-validation development by creating an account...

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 の詳細は公式を参照してください。

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 ...

purephp-validationインストール

ピュアPHPで Laravel の Validator を使えるようにするライブラリ purephp-validation をインストールします。

composer require macocci7/purephp-validation

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チェック)

バリデーションメッセージの出力は日本語です。

▼実行結果

名前の入力欄が表示されました。

何も入力せずにそのまま[Enter]で確定してみます。

叱られましたね。

全角2文字(UTF-8:6bytes)だけ入力して[Enter]で確定してみます。

叱られましたね。

21文字入力して[Enter]で確定してみます。

叱られましたね。

3文字以上、20文字以内で入力確定してみます。

emailの入力欄が表示されました。

何も入力しないで確定してみます。

叱られましたね。

不正なメールアドレスを入力して確定してみます。

DNSチェックまでしているので、存在しないドメインでは叱られます。

存在するドメインで入力確定してみましょう。

無事、バリデーションを通過し、入力内容が出力されました。

以上です。

コメント

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