Laravel5.7：FormRequestを使ってバリーデーションを実装する

[こちらはブログにも投稿しています。](https://ksysnote.com/php/validation-fromrequest/)

<!-- wp:paragraph -->
<p>公式の<a href="https://readouble.com/laravel/5.7/ja/validation.html">ドキュメント</a>を確認するとController内に記述するやり方が紹介されていますが、これだとControllerのソースが見にくくなるので、FormRequestに分けて実装して行きます。</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2>FormRequestの作成</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>まずはartisanを使用してFormRequsetの雛形を作成します。</p>
<!-- /wp:paragraph -->

<!-- wp:code -->
<pre class="wp-block-code"><code>php artisan make:request UserFormRequest</code></pre>
<!-- /wp:code -->

<!-- wp:paragraph -->
<p>コマンドを実行すると以下のようにファイルが作成されます。</p>
<!-- /wp:paragraph -->

<!-- wp:code -->
<pre class="wp-block-code"><code>app
├── Http
│   └── Requests
│       └── UserRequest.php</code></pre>
<!-- /wp:code -->

<!-- wp:heading -->
<h2>ルールとメッセージを設定</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>バリデーションのルールとメッセージを設定します。簡単に必須チェックだけしています。<br>rulesメソッドにバリデーションのルールを記載して、エラーメッセージをカスタマイズしたい場合は、messagesメソッドを追記します。</p>
<!-- /wp:paragraph -->

<!-- wp:code -->
<pre class="wp-block-code"><code>&lt;?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class UserRequest extends FormRequest
{
    public function authorize()
    {
        return true;
    }

    public function rules()
    {
        return [
            'name' => [
                'required',
            ],
            'address' => [
                'required'
            ]
        ];
    }

    public function messages()
    {
        return [
            'name.required' => '名前は必ず指定してください。',
            'address.required' => '住所は必ず指定してください。'
        ];
    }
}</code></pre>
<!-- /wp:code -->

<!-- wp:heading -->
<h2>Controllerからの呼び出し</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>こちらはメソッドインジェクションするだけです。バリデーションエラーがある場合は前の画面に自動的に遷移してくれます。</p>
<!-- /wp:paragraph -->

<!-- wp:code -->
<pre class="wp-block-code"><code>use App\Http\Requests\UserRequest;

class UserController extends Controller
{
    public function store(UserRequest $request)
    {
        dd($request->validated());
</code></pre>
<!-- /wp:code -->

<!-- wp:heading -->
<h2>入力画面でエラーを表示</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>入力画面のViewにエラーを表示する箇所を用意しておきます。</p>
<!-- /wp:paragraph -->

<!-- wp:code -->
<pre class="wp-block-code"><code>                @if ($errors->any())
                    &lt;div class="alert alert-danger">
                        &lt;ul>
                            @foreach ($errors->all() as $error)
                                &lt;li>{{ $error }}&lt;/li>
                            @endforeach
                        &lt;/ul>
                    &lt;/div>
                @endif</code></pre>
<!-- /wp:code -->

<!-- wp:heading -->
<h2>まとめ</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>バリデーションをFormRequestにまとめることができたのでかなりController内のソースがスッキリしました。<br>以下は、参考にしたサイトです。</p>
<!-- /wp:paragraph -->

<!-- wp:core-embed/speaker-deck {"url":"https://speakerdeck.com/localdisk/laravelniokeruhou-hui-sinaitamefalseapurikesiyonshe-ji","type":"rich","providerNameSlug":"speaker-deck","className":"wp-embed-aspect-4-3 wp-has-aspect-ratio"} -->
<figure class="wp-block-embed-speaker-deck wp-block-embed is-type-rich is-provider-speaker-deck wp-embed-aspect-4-3 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
https://speakerdeck.com/localdisk/laravelniokeruhou-hui-sinaitamefalseapurikesiyonshe-ji
</div></figure>
<!-- /wp:core-embed/speaker-deck -->

<!-- wp:paragraph -->
<p><a href="https://tac-blog.tech/index.php/2018/09/01/request-validation/">https://tac-blog.tech/index.php/2018/09/01/request-validation/</a></p>
<!-- /wp:paragraph -->