初めてのLaravel 5.1 : (17) Validation(入力チェック)

前回は、Formを作成してArticlesテーブルにデータを追加しましたが、入力データのチェックを行っていませんでした。今回はこの入力データのチェックを実装してみます。


Controller

Formで入力されたデータを保存している、storeメソッドを修正します。

<?php namespace AppHttpControllers;
// app/Http/Controllers/ArticlesController.php

use App\Article;
use App\Http\Controllers\Controller;

use Illuminate\Http\Request;  // ①'

class ArticlesController extends Controller {

	// ...

	public function store(Request $request) {  // ①
		$rules = [    // ②
			'title' => 'required|min:3',
			'body' => 'required',
			'published_at' => 'required|date',
		];
		$this->validate($request, $rules);  // ③

		Article::create($request->all());

		return redirect('articles');
	}
}

①リクエストの取得方法を変更しました。
前回は \Requestファサードを使って、リクエストにアクセスしましたが、今回は storeメソッドの引数から Illuminate\Http\Requestクラスのインスタンスを取得するようにしました。
Laravelのコントローラはメソッドの引数にタイプヒントでクラスを記述すると、そのクラスのインスタンスを自動生成して渡してくれます。とてもクールです。

②バリデーションルールを設定しています。
バリデーションルールの詳細は公式ドキュメントを参照してください。
http://laravel.com/docs/5.1/validation#available-validation-rules

③コントローラの validate() メソッドを実行しています。
ここでエラーがあると、自動的に前の画面にリダイレクトしてくれます。これまたクールです。


View

Form画面にエラー表示を追加ます。
$errors にエラーメッセージが複数格納されるので、@foreachを使って件数分表示しています。

// resources/views/articles/create.blade.php

@extends('layout')

@section('content')
    <h1>Write a New Article</h1>

    <hr/>

    {{-- エラーの表示を追加 --}}
    @if ($errors->any())
        <div class="alert alert-danger">
            <ul>
                @foreach ($errors->all() as $error)
                    <li>{{ $error }}</li>
                @endforeach
            </ul>
        </div>
    @endif

    {!! Form::open() !!}
        ...
    {!! Form::close() !!}
@stop

動作確認

念の為、全ての項目を入力し正常に記事が登録されることも確認してください。


まとめ

入力値のチェックとエラーの表示ができるようになりました。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中