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 1 year has passed since last update.

laravelのバリデーション

Last updated at Posted at 2021-11-20

##はじめに
ここではlaravelのvalidationのかけ方をまとめたいと思います。
またvalidation関連で勉強した内容をこちらに追記していきたいと思います。

##環境

Version
PHP 7.4.25
Laravel 8.69.0
mysql 8.0.27

##①コントローラーにそのまま書く方法

Illuminate\Http\Requestオブジェクトのvalidateメソッドを使用する。

App/Http/Controllers/UserController.php
class UserController extends Controller
{
    public function store(Request $request)
    {
        $request->validate([
            'name' => 'required',
            'email' => 'required|email',
    ]);
}

|で区切ることでバリデーションルールを追加できる。右から順に適応されていく。
laravel8系のバリデーションルール

##②Requestsディレクトリに分けて書く方法

はじめにApp/Requestsディレクトリにコントローラー名/アクション名Request.phpを作成しクラスを作ります。
今回の例はコントローラー名で名前空間をつくっています。

% php artisan make:request UserController/StoreRequest.php

以下が作成されたUserControllerのStoreRequestクラスになります。このファイルにvalidationを記述していきます。
authorizeメソッドはreturn trueにしておきます。falseだとエラーが発生しました。

App/Http/Requests/UserController/StoreRequest.php
namespace App\Http\Requests\UserController;

use Illuminate\Foundation\Http\FormRequest;

class UpdateRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            // 左側のkeyがフォームのname属性
            'name' => 'required',
            'email' => 'required|email|',
        ];
    }
}

次にコントローラーでStoreRequestクラスをuseして、そのインスタンスを引数に入れて使用します。

App/Http/Controllers/UserController.php
use App\Http\Requests\UserController\StoreRequest;

class UserController extends Controller
{
    public function store(StoreRequest $request)
    {
        // 先ほどのvalidationは消します
        // $request->validate([
            // 'name' => 'required',
            // 'email' => 'required|email',
    // ]);
    }
}

これでファイルで分割したvallidationを実装することができました!

##おわりに
どちらでもvalidationを書くことができますが、個人的にはファイルで分けたほうがControllerがスッキリしてみやすくなるのかなと思いました。これから臨機応変に対応していきたいです。

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?