LaravelはPHPのフレームワークで、優れたバリデーション機能を提供しています。バリデーションはWebアプリケーションにおけるデータの正当性を確保する重要なステップです。この記事では、Laravelでのバリデーションの基本を学びましょう。

環境情報

このガイドはLaravel 7.xをベースにしています。バージョン7.x以降では、バリデーションルールの使いやすさや柔軟性が向上しています。したがって、Laravelを7.x以上にアップグレードすることをお勧めします。

また、この記事では、Laravelプロジェクトの基本的なセットアップが完了していることを前提としています。

本文

1. バリデーションルールの基本

Laravelのバリデーションは、ルールを指定してデータを検証することができます。たとえば、必須フィールド、最小/最大長、メールアドレス形式などのルールを設定できます。

以下はControllerでバリデーションをする例

public function store(Request $request)
{
    // リクエストデータをバリデーション
    $validatedData = $request->validate([
        'name' => 'required|string|max:255',
        'email' => 'required|email|unique:users',
    ]);

    // バリデーション成功時の処理
    // 1. バリデーションを通過したデータを取得
    $name = $validatedData['name'];
    $email = $validatedData['email'];

    // 2. データベースに新しいレコードを保存
    $user = new User();
    $user->name = $name;
    $user->email = $email;
    $user->save();

    // 3. リダイレクトやメッセージを設定してユーザーに成功を通知
    return redirect('/users')->with('success', 'ユーザーが正常に登録されました!');
}

2. カスタムバリデーションルール

カスタムバリデーションルールを作成することも可能です。これにより、プロジェクト固有のバリデーションを定義できます。

コーディング例

まず、プロジェクトの app/Providers ディレクトリに CustomValidationServiceProvider.php というファイルを作成し、その中にカスタムバリデーションプロバイダーを定義します。

use Illuminate\Support\ServiceProvider;
use Validator;

class CustomValidationServiceProvider extends ServiceProvider
{
    public function boot()
    {
        // カスタムバリデーションルールの定義
        Validator::extend('phone_format', function ($attribute, $value, $parameters, $validator) {
            // 電話番号の正規表現パターン
            $pattern = '/^\d{3}-\d{3}-\d{4}$/';

            // バリデーションロジック
            return preg_match($pattern, $value);
        });
    }

    public function register()
    {
        //
    }
}

次に、Kernel クラスを編集します。プロジェクトの app/Http/Kernel.php ファイルを開き、$providers プロパティに CustomValidationServiceProvider を追加します。

// app/Http/Kernel.php

protected $providers = [
    // 他のプロバイダーを追加

    \App\Providers\CustomValidationServiceProvider::class,
];

この例では、phone_format というカスタムルールを作成しています。このルールは、与えられた値(電話番号)が xxx-xxx-xxxx の形式に合致するかどうかを確認します。

カスタムバリデーションルールを定義した後、このルールをルールセット内で使用することができます。例えば、以下のようにコントローラ内でルールセットを定義し、バリデーションを実行できます。

use Illuminate\Http\Request;

class MyController extends Controller
{
    public function store(Request $request)
    {
        $rules = [
            'phone_number' => 'required|phone_format',
            // 他のバリデーションルールを追加
        ];
        // エラーメッセージのカスタマイズ
        $messages = [
            'phone_format' => '電話番号はxxx-xxx-xxxxの形式で入力してください。',
            // 他のエラーメッセージを定義
        ];

        $validator = Validator::make($request->all(), $rules, $messages);

        if ($validator->fails()) {
            // バリデーションエラーが発生した場合の処理
            // ...
        } else {
            // バリデーション成功時の処理
            // ...
        }
    }
}

結びの言葉

Laravelを使用したバリデーションの基本について学びました。バリデーションはデータの信頼性を確保し、セキュリティを強化するために欠かせない要素です。紹介したやり方以外にもFormRequestクラスを使ってControllerで行っていたバリデーションを別クラスに切り出す方法などもあるので別途ご紹介したいと思います。Laravelの柔軟なバリデーション機能を活用して、安全で信頼性の高いアプリケーションを開発しましょう。

このガイドがLaravelバリデーションの理解に役立つことを願っています。次回の記事もお楽しみに!

おすすめの記事