Laravelでバリデーションを使う方法【初心者向け】

初心者向けにLaravelでバリデーションを使う方法について解説しています。フレームワークを使ったバリデーションについて学びましょう。Webアプリケーションを作る上で欠かせない処理なので、書き方を理解しておきましょう。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

Laravelでバリデーションを使う方法について解説します。

Webアプリケーションで会員登録やログインなどの機能を作る上で欠かせない処理なので、ぜひ使い方を覚えておきましょう。

 

なお本記事は、TechAcademyのPHP/Laravel講座の内容をもとに紹介しています。

 

田島悠介

今回は、Lravelに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

Laravelでバリデーションを使う方法について詳しく説明していくね!

大石ゆかり

お願いします!

 

バリデーションとは

バリデーション (validation: 検証) とは主にユーザーの入力情報が正しいかどうかを確かめる処理・機能のことを言い、これは通常の Web サービスであれば必ずと言っていいほど行われています。

何かのサービスを使い始める時、アカウント登録で「パスワードが短すぎる」、「このアカウント名はすでに存在します」など注意されたことはないでしょうか?これらはバリデーションが行われている一例です。バリデーションを行えば、Web サービスを矛盾なく動作させるために、ユーザーから情報がちゃんと入力されているのを「入り口」の時点で確かめることができます。後続の処理では情報があるものだと仮定して実装を進めることができるでしょう。

情報の整合性だけでなく面白い使われ方の例として、某 SNS では投稿文に上限の文字数が決まっておりそれがサービスの特色になっています、この特色を保つために文字数制限のバリデーションが重要な働きをしているのがわかるでしょう。また、バリデーションにはクライアントサイド、サーバーサイドと、行う場所に応じた分類があります。

今回は Laravel に関連することなので、サーバーサイドバリデーションについて説明していきたいと思います。どちらも非常に重要なので、機会があればよく勉強してみるといいかもしれません。

 

Laravelのバリデーションの書き方

Laravelでもバリデーションを書くことができます。リクエストに格納されている入力内容に対して、「必須」、「ある値以上」、「ある値未満」など様々なバリデーションルールを適応することができ、必要性に応じた異なる呼び出し方ができます。

https://readouble.com/laravel/5.6/ja/validation.html

リンクを見てもらうのが一番良いですが、以下のような書き方ができます。

  • $request->validateメソッドを使って検証する
  • Validator ファサードを利用してmakeメソッドでバリデータを作成した後、検証する
  • 独自のRequestクラスを定義して、rulesメソッドを実装したのち検証する

今回は独自の Request クラスを定義する方法に限って説明して見ます。

 

[PR] PHPのプログラミングで挫折しない学習方法を動画で公開中

実際にLaravelを使ってバリデーションを行ってみよう

ここでは Laravel 5.5 系を使用します。バージョン間の差異はそこまでないと思いますが、あれば適宜読み替えて言ってください。

簡単な掲示板アプリケーションを作成するつもりでバリデーションを使って見ます、以下のような構成を想定しています。
Post モデル: 投稿を表すモデル。投稿のタイトル (title)、本文 (body) をフィールドに持っており、各フィールドは必須で、タイトルは 255、本文は 2048 文字の制限がついている。
PostController: Post モデルを操作するためのコントローラー。以下のアクションを持っている。
index: 全ての投稿が一覧で表示されているページ。
create: ユーザーが投稿作成を行うページ。
store: 投稿データを送信する先。投稿内容をバリデートし、大丈夫であれば index ページにリダイレクト、間違っていれば create ページに戻しエラーを表示して修正を促す。

PostController@create でバリデーションを行うために StorePost というリクエストクラスを作成しましょう。

$ php artisan make:request StorePost

コマンドを実行すると、app/Http/Requests 以下にStorePost.phpというファイルが作成されます。上記に記載したtitle、bodyの制限を満たすように、rulesメソッドにバリデーションルールを追加していきましょう。

…
    public function rules()
    {
        return [
            'title' => 'required|max:255',
            'body' => 'required|max:2048'
        ];
    }
…

ここでは title、bodyそれぞれに対してrequired(必須)、 max:数値 (数値を超えたものは不可) というバリデーションルールを設定しています。ルールは複数設定することができ、| (パイプ) によって羅列していきます。

作成したリクエストクラスをコントローラーのアクションで使用するように設定します。ファイルのクラス定義が始まる前の箇所に、作成したクラスを使うための use を追加します。

+ use App\Http\Requests\StorePost;
…
class PostController extends Controller
{
…

次に対象となるアクション、 store に対して作成したリクエストクラスを使用するように記述を変更します。Request を StorePost に書き換えてください。

- public function store(Request $request)
+ public function store(StorePost $request)

以上でバリデーションの設定が完了しました。

画面側から不正な入力値 (例えば title, body に何も入力しない) を送信すると、保存に失敗して作成画面に戻ってくるようになります。あとはバリデーションエラーの表示ですが、エラー内容は Laravel が管理してくれている $errors変数にしまわれているので、ビューなどでエラーを表示するロジックを書いてあげれば完成になります。

以上駆け足になってしまいましたが、バリデーションの説明と記述、使い方になりました。お役に立てたのであれば幸いです。

この記事を監修してくれた方

鵜澤峻平(うさわしゅんぺい)

普現在はフリーランスのエンジニアをしていてプログラミング歴は5年目になります。普段はRails、Laravel、Node.js等を使ってWeb、モバイルアプリケーションを作成しています。開発実績としては、いくつかのWebサービス、コンシューマー向けモバイルアプリケーション、NPOサイトリニューアル、ロボット用プログラムなどがあります。

TechAcademyでメンターをはじめたのは、「プログラミングでやりたいことがある人を応援したい」、「講師と受講者が話し合って学び方を決めていく」に惹かれたからです。

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

オンラインのプログラミングスクールTechAcademyではオンラインブートキャンプPHP/Laravelコースを提供しています。

PHPやフレームワークのLaravelを使ってWebアプリケーションの開発を学ぶことができます。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間で習得することが可能です。

また、現役エンジニアから学べる無料のプログラミング体験会も実施しているので、ぜひ参加してみてください。