1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Laravel バリデーション requiredIfを用いて、requiredをかけたい時とかけたくない時の条件分岐を簡単にする!

Posted at

はじめに

登録処理では、バリデーションのrequiredを使いたいけど、更新処理ではrequiredをかけたくない場合があるかと思います。
そんな時に可読性をなるべく落とさずに簡単に条件分岐できる方法を紹介します。

目次

  1. バリデーションをかけるフォーム
  2. リクエストファイル

バリデーションをかけるフォーム

例によってショボいフォームを書いてみました。(分かりやすさ重視でシンプルに作ってます)
・更新の際は画像のみバリデーションのrequiredをかけたく無いのを想定しています。
・登録処理では画像は必須にしたいので、リクエストメソッドがpostの時のみrequiredをかけたいところです。

<form 
  action="{{ route('user.post.update', ['post' => $post]) }}" 
  enctype="multipart/form-data" 
  method="POST">
    @csrf
    @method('PUT')

  <div>
    <p>タイトル</p>
    <input type="text" name="title" 
     value="{{ old('title', optional($post)->title) }}">
  </div>
   
  <div>
    <p>投稿内容</p>
    <textarea type="text" name="content">
      {{old('content', optional($post)->content)}}
    </textarea>
  </div>

  <div>
    <p>画像</p>
    <input type="file" name="image_url">
  </div>
</form>

リクエストファイル

requiredIfの中がtrueならrequiredを適用となります。
・$request->isMethod('post')
リクエストメソッドがpostであれば、trueを返します。違う場合はfalse。
・$request->isMethod('post')によってpostメソッドの時だけ、'image_url'フィールドがrequiredになります。

// 下記2行を追記
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;


                     // Requestクラスを追記
public function rules(Request $request)
{
        return [
            'user_id' => [省略],
            'title' => [省略],
            // Rule::requiredIfメソッドを追記
            'image_url' => [Rule::requiredIf($request->isMethod('post'))],
        ]
}
1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?