ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
バリデーションの基本: $request->validate()
Laravel で最も簡単なバリデーション方法。コントローラ内で $request->validate() を呼ぶだけで、失敗時は自動的にリダイレクト(HTML)or 422 JSON 応答(API)を返します。
// app/Http/Controllers/UserController.php
public function store(Request $request)
{
$validated = $request->validate([
'name' => 'required|string|max:255',
'email' => 'required|email|unique:users,email',
'password' => 'required|min:8|confirmed',
'age' => 'nullable|integer|min:0|max:150',
]);
User::create($validated);
return redirect()->route('users.index');
}
失敗時は Illuminate\Validation\ValidationException がスローされ、Laravel が以下を自動処理します:
- HTML リクエスト → 直前ページへリダイレクト +
$errorsをセッションに格納 - JSON / Ajax リクエスト → HTTP 422 + エラー JSON を返却
Form Request クラスで分離する
コントローラが肥大化したら Form Request に分離するのがベストプラクティス:
php artisan make:request StoreUserRequest
# → app/Http/Requests/StoreUserRequest.php// app/Http/Requests/StoreUserRequest.php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StoreUserRequest extends FormRequest
{
public function authorize(): bool
{
return $this->user()->can('create', User::class);
}
public function rules(): array
{
return [
'name' => ['required', 'string', 'max:255'],
'email' => ['required', 'email', 'unique:users,email'],
'password' => ['required', 'min:8', 'confirmed'],
];
}
public function messages(): array
{
return [
'email.unique' => 'このメールアドレスは既に登録されています。',
];
}
public function attributes(): array
{
return [
'name' => '氏名',
'email' => 'メールアドレス',
];
}
}
コントローラ側は型ヒントするだけで自動的にバリデーションが実行されます:
public function store(StoreUserRequest $request)
{
// ここに到達した時点でバリデーション済
User::create($request->validated());
return redirect()->route('users.index');
}
主要バリデーションルール一覧
| ルール | 説明 | 例 |
|---|---|---|
required | 必須項目 | required |
nullable | null 許容(他ルールをスキップ) | nullable|integer |
string / integer / numeric | 型チェック | integer|min:1 |
min / max | 長さ・値の範囲 | min:8|max:255 |
email | メール形式 | email:rfc,dns |
unique:table,column | DB に重複なし | unique:users,email |
exists:table,column | DB に存在する | exists:roles,id |
confirmed | {field}_confirmation と一致 | password+password_confirmation |
regex:/pattern/ | 正規表現 | regex:/^[A-Z]+$/ |
in:a,b,c | 列挙値 | in:admin,user,guest |
date / date_format:Y-m-d | 日付 | date_format:Y-m-d H:i |
image / mimes:jpg,png | ファイル種別 | image|mimes:jpg,png|max:2048 |
Validator::make() を直接使う
Request 以外(コマンド、ジョブ、Livewire 等)でバリデーションしたいときは Validator ファサードを使います:
use Illuminate\Support\Facades\Validator;
$validator = Validator::make($data, [
'name' => 'required|max:255',
'email' => 'required|email',
]);
if ($validator->fails()) {
return response()->json([
'errors' => $validator->errors(),
], 422);
}
$validated = $validator->validated();
カスタムルール
標準ルールで足りない場合はカスタムルールを作ります:
php artisan make:rule Uppercase// app/Rules/Uppercase.php
namespace App\Rules;
use Closure;
use Illuminate\Contracts\Validation\ValidationRule;
class Uppercase implements ValidationRule
{
public function validate(string $attribute, mixed $value, Closure $fail): void
{
if (strtoupper($value) !== $value) {
$fail('The :attribute must be uppercase.');
}
}
}
// 使い方
$request->validate([
'code' => ['required', new Uppercase],
]);
1 行で済むならクロージャでも OK:
$request->validate([
'title' => [
'required',
function (string $attribute, mixed $value, Closure $fail) {
if (str_contains($value, 'NG')) {
$fail("{$attribute} に NG ワードが含まれています。");
}
},
],
]);
エラーメッセージのローカライズ
日本語化は resources/lang/ja/validation.php を配置:
# Laravel 標準の日本語訳パッケージを使う
composer require askdkc/breezejp --dev
php artisan breezejp
# または手動で resources/lang/ja/ を作成// resources/lang/ja/validation.php
return [
'required' => ':attribute は必須項目です。',
'email' => ':attribute は正しいメールアドレス形式で入力してください。',
'min' => [
'string' => ':attribute は :min 文字以上で入力してください。',
'numeric' => ':attribute は :min 以上の数値で入力してください。',
],
'unique' => ':attribute は既に使用されています。',
'attributes' => [
'name' => '氏名',
'email' => 'メールアドレス',
'password' => 'パスワード',
],
];
// config/app.php
'locale' => 'ja',
Blade テンプレートでのエラー表示
FAQ
Q: API で JSON エラーを返したい
A: Accept: application/json ヘッダ付きならデフォルトで JSON 応答。または app/Exceptions/Handler.php で render() をカスタマイズ。
Q: unique:users,email で更新時に自分自身を除外したい
A: Rule::unique('users', 'email')->ignore($this->route('user')) を使います。
Q: ネストした配列をバリデーションしたい
A: 'items.*.name' => 'required' のようにドット記法 + ワイルドカードでアクセス可能です。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
- インストールと設定
- クイックスタート & チュートリアル(初心者向け)
- クイックスタート & チュートリアル(中級者向け)
- ルーティング
- Bladeテンプレート(ビュー/レイアウト)
- コントローラー
- マイグレーションとテーブル定義
- データベースの設定
- Eloquentモデル (ORM)
- SQLとクエリビルダー
- バリデーション
- .envファイルの設定値へのアクセス
- 動作環境による分岐処理
- configフォルダ配下の設定値へのアクセス
- assetヘルパーを利用したpublicフォルダへのアクセス
- storageフォルダへのアクセス
- アプリケーション名の変更
- メンテナンス
- ログイン画面(認証システム)の作成
- ログインの必須化
- ログインユーザー情報の取得
- ルートの認証化
- 本番サーバーへのデプロイ方法
- 多言語化
- csrf_field
- ファイルのダウンロード
- CSVのアップロードおよび読み込み(maatwebsite/excel)
- ページタイトルの設定
- コマンド一覧
- エラー一覧
- SQLの実行ログ出力方法
- キャッシュのクリア
- Selectの結果の最初もしくは最後に任意の値を追加する方法
- ajaxでPOST通信する際の注意点
- ソーシャルログインの実装
- セッション情報の確認
- ログイン、ユーザー登録、パスワードリセット後のリダイレクト先の変更方法
- redirectやreturn viewにメッセージを付与する方法
- クッキー(cookie)の設定と取得
- クラスの再読み込み
- csrfの有効時間を変更する方法
- ViewComposerを用いてviewに共通の値を付与する方法
- View::shareを用いて共通の値を各ビューに渡す方法
- ミドルウェアを用いた処理の共通化
- Middleware内でAuth::check()などを使用する方法
- Controller以外でリダイレクトする方法
- セッションの値の取得/保存/更新/削除
- $requestの値を変更する方法
- 常時SSL化
- ページング(ページネーション)をする方法
- vue.jsとの連携
- Vue.jsと連携するSPA実行環境構築
- .envの値をvue.jsで参照する方法
- vue.jsを本番環境にリリースする方法
- could not find driver(Windows, MySQL編)
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Laravel キャッシュクリア完全ガイド(cache:clear / config:clear / 2026-05-18 07:42:07
- プロジェクトの作成と削除 2026-05-18 07:42:07
- インストール直後にNetbeansが反応しない 2026-05-18 07:42:07
- 動画やチャンネルの検索 2026-05-18 07:42:07
- APIキー取得方法 2026-05-18 07:42:07
- チャンネル情報の取得 2026-05-18 07:42:07
- API 入門 — Web API(REST / GraphQL / gRPC / 2026-05-18 07:42:07
- インストール(eclipseプラグイン) 2026-05-18 07:42:07
- Laravel「Dotenv values containing spaces must be surrounded 2026-05-18 07:42:07
- エラー一覧 2026-05-18 07:42:07
- curl: (51) SSL: certificate subject name '~' does not match 2026-05-18 07:42:07
- インストール方法(Windows版) 2026-05-18 07:42:07
- JSONから配列に変換 2026-05-18 07:42:07
- 処理を一定時間待つ 2026-05-18 07:42:07
- A non well formed numeric value encountered 2026-05-18 07:42:07
コメントを削除してもよろしいでしょうか?