ルーティング
/routes/web.php
<?php
Route::get('/validation_sample', 'SampleController@validationSampleForm');
Route::post('/validation_sample', 'SampleController@validationSample');
コントローラー
app/Http/Controllers/SampleController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class SampleController extends Controller{
public function validationSampleForm(){
return view('samples.validation_sample_form', [
'title' => 'バリデーション用サンプルフォーム',
]);
}
public function validationSample(Request $request){
$request->validate([
// ここに項目ごとのバリデーションルールを記述
'name' => ['required', 'min:2', 'max:20'],
'user_name' => ['required', 'min:3', 'max:20'],
'email' => ['required', 'email'],
'age' => ['required', 'integer', 'min:16', 'max:150'],
'birthdate' => ['required', 'date', 'before:now', 'after_or_equal:1900-1-1'],
]);
return redirect('/validation_sample');
}
}
ビュー
resources/views/samples/validation_sample_form.blade.php
@extends('layouts.default')
@section('title', $title)
@section('content')
<h1>{{ $title }}</h1>
<form method="post">
@csrf
<div>
<label>
名前:
<input type="text" name="name">
</label>
</div>
<div>
<label>
名前(ふりがな):
<input type="text" name="name_kana">
</label>
</div>
<div>
<label>
ユーザー名(アルファベットor数字):
<input type="text" name="user_name">
</label>
</div>
<div>
<label>
メールアドレス:
<input type="text" name="email">
</label>
</div>
<div>
<label>
年齢:
<input type="text" name="age">
</label>
</div>
<div>
<label>
生年月日:
<input type="date" name="birthdate">
</label>
</div>
<div>
<label>
住所:
<input type="text" name="address">
</label>
</div>
<div>
<label>
電話番号:
<input type="text" name="phone">
</label>
</div>
<div>
<label>
プライバシーポリシーに同意します:
<input type="checkbox" name="policy">
</label>
</div>
<div>
<input type="submit" value="登録">
</div>
</form>
@endsection
共通レイアウトファイル
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>@yield('title')</title>
<style>
.header_nav {
display: flex;
list-style: none;
padding-left: 0;
}
.header_nav li {
margin-right: 30px;
}
/* エラーメッセージ用のスタイル */
.error {
color: red;
}
</style>
</head>
<body>
@yield('header')
{{-- エラーメッセージを出力 --}}
@foreach($errors->all() as $error)
<p class="error">{{ $error }}</p>
@endforeach
@yield('content')
</body>
</html>