LoginSignup
0
1

More than 3 years have passed since last update.

【Laravel基礎】フォームの入力内容を制限する方法【バリデーションとフォームリクエスト】

Last updated at Posted at 2020-11-17

概要

Laravel学習で自分がつまずいた部分を備忘録としてまとめています。
今回はフォームの入力内容の制限に関する記事です。

つまずいたポイント

指定条件以外のフォーム入力を弾いてくれるバリデーション
そんなバリデーションですが、アクション事に毎回指定するのが面倒くさい。。
効率的な方法が無いか調べました。

どうやら、フォームリクエストなるものを使うと
一括でバリデーションを指定出来るとのこと。

バリデーションの復習もかねて、下記の2つを記事にしました。

①バリデーション

②フォームリクエスト

以下、記事内容です!

バリデーション

まずはバリデーションの復習。
保存や編集などの、フォーム内容を受け取るアクション内で、
$this->validate($request,[条件]);を入力。
第2引数の入力内容が、フォームの入力条件になります。

■コントローラ

PostsController
    public function store(Request $request) {  

      //バリデーションで条件を指定
       $this->validate($request, [
        'title' => 'required|min:3',
        'body' => 'required'
      ]);

      $post = new Post();
      $post->title = $request->title;
      $post->body = $request->body;
      $post->save();
      return redirect('/');
    }

上記の場合だと、
title => 3文字以上 , body => 入力必須
て感じですね。
この条件以外の内容がフォームから送信されると、バリデーションが弾いてくれます。

フォームリクエスト

次はフォームリクエストです。
バリデーションはアクション毎にフォームの入力内容を指定していましたが、
フォームリクエストではそれを一括で指定することが出来ます。
以下、手順です。

ターミナル
php artisan make:request PostRequest

フォームリクエストはphp artisan make:request 〜Requestで作成出来ます。
今回はPostRequestと名付けました。
作成したRequestはApp\Http\Requestsの中にあります。

■フォームリクエスト

PostRequest.php
   //①
   public function rules()
    {
        return [
            'title' => 'required|min:3',
            'body' => 'required'
        ];
    }

    //②
    public function messages() 
    {
        return [
            'title.required' => 'タイトルを入力して下さい。'
       ];
    }

フォームリクエスト上での主な指定内容は2つ。
1つは入力内容の条件、もう1つはバリデーションのメッセージです。

まずは入力内容の条件から。rulesメソッドを使う事で条件指定できます。(①)
中身は先ほどのバリデーションと同じですね。

そしてmessagesメソッドでは、
バリデーション適用時のメッセージを指定する事ができます。(②)
デフォルトでは英文が指定されているので、わかり易くするには日本語に変えておいた方が良いかもですね。

■コントローラー

PostsController
//①
use App\Http\Requests\PostRequest;

    //②
    public function store(PostRequest $request) {   
      $post = new Post();
      $post->title = $request->title;
      $post->body = $request->body;
      $post->save();
      return redirect('/');
    }


コントローラでは、フォームリクエストをuseで使えるようにしましょう。(①)
そしてアクションの引数にフォームリクエストを入力。(②)
フォームリクエストで指定した内容が適用されるようになります。
バリデーションを書かないで良いので楽ですね。

フォームリクエストは以上です!
1.ターミナルからフォームリクエストを作成
2.フォームリクエストの条件を指定
3.コントローラ+アクションでフォームリクエストを適用
という流れですね。

ちなみに、何でアクションの引数にrequestを入れるだけでフォーム内容が受け取れるのか?
疑問に思って調べましたが、「サービスコンテナ」やら「メソッドインジェクション」やら「DI(Dependency Injection = 依存性注入)」なる単語まで出てきて、脳がフリーズしたので一旦忘れます。いつかちゃんと調べて記事にします。多分。。。

まとめ

以上、Laravelでフォームの入力内容を制限する方法でした。
最後まで読んで頂きありがとうございました。
フォームリクエストの方がコードの量が少なくなるので楽ちんですね。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1