Laravelで13歳以上の誕生日を検証する方法


  1. バリデーションルールを使用する方法:

まず、バリデーションルールを使用して13歳以上の誕生日を検証する方法を見てみましょう。

use Illuminate\Support\Facades\Validator;
public function validateBirthday(Request $request)
{
    $validator = Validator::make($request->all(), [
        'birthday' => 'required|date|before_or_equal:' . now()->subYears(13)->format('Y-m-d'),
    ]);
    if ($validator->fails()) {
        // バリデーションエラーの処理
    }
// バリデーションが成功した場合の処理
}

上記の例では、birthdayというフィールドを持つリクエストを検証しています。バリデーションルールrequireddate、およびbefore_or_equalを使用して、現在の日付から13年前までの日付であることを確認しています。

  1. カスタムバリデーションルールを使用する方法:

また、カスタムバリデーションルールを作成して、より詳細な検証ロジックを実装することもできます。

use Illuminate\Support\Facades\Validator;
public function validateBirthday(Request $request)
{
    $validator = Validator::make($request->all(), [
        'birthday' => ['required', 'date', 'age_validation:13'],
    ]);
    if ($validator->fails()) {
        // バリデーションエラーの処理
    }
// バリデーションが成功した場合の処理
}

上記の例では、age_validationというカスタムバリデーションルールを使用して13歳以上の誕生日を検証しています。このルールはカスタムバリデーションルールを作成する必要があります。以下はその例です。

use Illuminate\Contracts\Validation\Rule;
class AgeValidationRule implements Rule
{
    protected $minimumAge;
    public function __construct($minimumAge)
    {
        $this->minimumAge = $minimumAge;
    }
    public function passes($attribute, $value)
    {
        $birthday = \Carbon\Carbon::parse($value);
        $minimumDate = \Carbon\Carbon::now()->subYears($this->minimumAge);
        return $birthday->lte($minimumDate);
    }
    public function message()
    {
        return 'The :attribute must be at least ' . $this->minimumAge . ' years old.';
    }
}

上記の例では、AgeValidationRuleというカスタムバリデーションルールを作成しています。passesメソッドでは、渡された誕生日が指定された最小年齢以上であるかどうかを確認しています。

これらの方法を使用することで、Laravelで13歳以上の誕生日を検証することができます。必要に応じて、エラーメッセージや追加のバリデーションルールをカスタマイズすることもできます。