laravel カスタムバリデーター チェックされる以外のPostされた値を使う方法

# 目的

- カスタムバリデーターのルール定義部分にてそのルールを用いてチェックされる値以外を呼び出して使用する方法をまとめる

# 環境

- ハードウェア環境

| 項目 | 情報 |
| --- | --- |
| OS | macOS Big Sur(11.6) |
| ハードウェア | MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports) |
| プロセッサ | 2 GHz クアッドコアIntel Core i5 |
| メモリ | 32 GB 3733 MHz LPDDR4 |
| グラフィックス | Intel Iris Plus Graphics 1536 MB |

- ソフトウェア環境

| 項目 | 情報 | 備考 |
| --- | --- | --- |
| PHP バージョン | 7.4.11 | Homebrewを用いてこちらの方法で導入→[Mac HomebrewでPHPをインストールする](https://qiita.com/miriwo/items/cd54077aad7e139cf518) |
| Laravel バージョン | 8.X | commposerを用いてこちらの方法で導入→[Mac Laravelの環境構築を行う](https://qiita.com/miriwo/items/adaaaeecae69d6392e08) |
| MySQLバージョン | 8.0.21 for osx10.13 on x86_64 | Homwbrewを用いてこちらの方法で導入→[Mac HomebrewでMySQLをインストールする](https://qiita.com/miriwo/items/ef6a064bc545fbea29d9) |

# ご注意

- 本知見は同じプロジェクトに携わっているエンジニアの方に教えていただいた内容です。
- 筆者の知見ではありません。
- 忘れたくなかったため記事にしました！（ご本人にも快く承諾いだけました！本当にありがとうございます！）

# 概要

- 下記の記事の作業が完了しているものとして本記事の説明を行う。
    - [laravel バリデーションルールを自分で作る（カスタムバリデーター）](https://qiita.com/miriwo/items/5d2483c4b0d25df33c2f)
- `laravel8_easy_crud/app/Validator/CustomValidator.php`の`validateNumOnly()`でcontent以外のPostを受け取って都度ルールを変更する方法をまとめる。
- データPost時に「content」と「otherStr」を一緒にPostするようにし、`dd()`メソッドで「otherStg」が実際に`validateNumOnly()`で取得できるか確認する。
- 今回の作業完了後のコードは下記にアップしてある。
    - [https://github.com/miriwo0104/laravel8_easy_crud/tree/call_other_post_value_at_CustomValidator](https://github.com/miriwo0104/laravel8_easy_crud/tree/call_other_post_value_at_CustomValidator)

# 方法

1. 下記のように`create.blade.php`を修正する。（`<input type="hidden" value="これはotherStrです" name="otherStr">`を追記）

    ```laravel8_easy_crud/resources/views/contents/create.blade.php
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>新規投稿</title>
    </head>
    <body>
        <header></header>
        <main>
            <h1>新規投稿</h1>
            <form action="{{ route('contents.save') }}" method="post">
                @csrf
                @error('content')
                    {{ $message }}
                    <br>
                @enderror
                <textarea name="content"  cols="30" rows="10"></textarea>
                <input type="hidden" value="これはotherStrです" name="otherStr">
                <input type="submit" value="投稿">
            </form>
        </main>
        <footer></footer>
    </body>
    </html>
    ```

1. 下記のように`CustomValidator.php`を修正する。（`dd($this->data['otherStr']);`を追記）

    ```laravel8_easy_crud/app/Validator/CustomValidator.php
    <?php
    
    namespace App\Validator;
    
    use Illuminate\Validation\Validator;
    
    class CustomValidator extends Validator
    {
        public function validateNumOnly($attribute, $value)
        {
            dd($this->data['otherStr']);
            return (preg_match("/^[0-9 ]+$/i", $value));
        }
    }
    ```

1. ローカルサーバーを起動し[/contents/create](http://127.0.0.1:8000/contents/create)にアクセス、任意の文字列を入力して「投稿」をクリックする。

    ![新規投稿_と_「laravel_カスタムバリデーターで当該のname以外のnameに紐づくPostされた値を取得する方法」を編集_-_Qiita.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/dd5fb4f0-02b2-91cc-0fd2-280089473c49.png)

1. `dd()`メソッドが実行され、CustomValidator.phpにて「otherStr」に　紐づく値が取得する事ができた。

    ![127_0_0_1_8000_contents_save.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/a7ba0392-4f01-8a3e-c804-e29807eebf00.png)

# 簡単な説明

- `laravel8_easy_crud/vendor/laravel/framework/src/Illuminate/Validation/Validator.php`に記載されている下記の部分で今回呼び出した変数`data`が定義されているっぽい

    ```laravel8_easy_crud/vendor/laravel/framework/src/Illuminate/Validation/Validator.php
    /**
     * The data under validation.
     *
     * @var array
     */
    protected $data;
    ```