Laravel VScode デバッグで出るエラー（例外）を解決する

# 目的

- VScodeのPhpDebugを用いてLaravelのデバッグ環境を構築したがエラー（例外）が出てしまってちょっと詰まったので解決方法をメモ的にまとめておく

# 環境

- ハードウェア環境

| 項目 | 情報 |
| --- | --- |
| OS | macOS Catalina(10.15.5) |
| ハードウェア | 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.8 | Homebrewを用いてこちらの方法で導入→[Mac HomebrewでPHPをインストールする](https://qiita.com/miriwo/items/cd54077aad7e139cf518) |
| Laravel バージョン | 6.X | commposerを用いてこちらの方法で導入→[Mac Laravelの環境構築を行う](https://qiita.com/miriwo/items/adaaaeecae69d6392e08) |
| MySQLバージョン | 8.0.19 for osx10.13 on x86_64 | Homwbrewを用いてこちらの方法で導入→[Mac HomebrewでMySQLをインストールする](https://qiita.com/miriwo/items/ef6a064bc545fbea29d9) |

# 情報

- Macに直接構築(Dockerなど未使用)したLaravelのローカル開発環境においての問題をまとめる。

# エラーまでの経緯

1. ローカル開発環境にてdebugモードにしてからブレークポイントを設定した。
1. ChromeのXdebug helperアプリでlaravelアプリのタブをデバッグモードにした。
1. ブレークポイントに関係のあるlaravelアプリのページを開いた。

# エラー

- 下記のエラー（例外）がVScodeのソース上に表示され自分が設定したブレークポイント以外で処理が止まってしまう。

    ```
    例外が発生しました
    Illuminate\Contracts\Encryption\DecryptException: The payload is invalid.
    ```

    ![Encrypter_php_—_j-project.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/e5d068c1-1ae2-ce23-53d8-cff0ea7d4f25.png)

# 解決策1 ソースに追記

1. アプリ名ディレクトリで下記コマンドを実行してEncryptCookies.phpを開く

    ```terminal
    $ vi app/Http/Middleware/EncryptCookies.php
    ```

1. 下記のように内容を修正する

    ```アプリ名ディレクトリ/app/Http/Middleware/EncryptCookies.php
    <?php
    
    namespace App\Http\Middleware;
    
    use Illuminate\Cookie\Middleware\EncryptCookies as Middleware;
    
    class EncryptCookies extends Middleware
    {
        /**
         * The names of the cookies that should not be encrypted.
         *
         * @var array
         */
        protected $except = [
            // 下記を追記
            'XDEBUG_SESSION'
        ];
    }    
    ```

1. その後エラー（例外）が出たときと同じ方法でデバッグを実行したら問題は解決した。
1. しかし本方法だと`$ git status`コマンドを実行すると毎回EncryptCookies.phpが差分として表示されて目障り。

# 解決策2 ソースをいじらない

1. VScodeのデバッグ時のサイドバーの「ブレークポイント」を確認する。

    ![Encrypter_php_—_j-project-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/d515970d-7e29-f289-8112-714550cc2617.png)

1. 「ブレークポイント」のタブの中に「Everything」という項目がありデフォルトだとチェックが入っている。

    ![Encrypter_php_—_j-project-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/9d62dc35-f2d6-d040-8496-f0eb138ce8e4.png)

1. 「Everything」のチェックを外す。

    ![Encrypter_php_—_j-project-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/3913e526-5db8-8696-14dc-9d47a4a60985.png)

1. その後エラー（例外）が出たときと同じ方法でデバッグを実行したら問題は解決した。

# 参考文献

- [https://stackoverflow.com/questions/47355311/laravel-5-with-xdebug-always-throws-the-payload-is-invalid](https://stackoverflow.com/questions/47355311/laravel-5-with-xdebug-always-throws-the-payload-is-invalid)
- [https://laracasts.com/discuss/channels/general-discussion/vs-code-xdebugging-throws-decryptexception-the-payload-is-invalid](https://laracasts.com/discuss/channels/general-discussion/vs-code-xdebugging-throws-decryptexception-the-payload-is-invalid)
- [https://jpcloud.net/q/debdsgsf](https://jpcloud.net/q/debdsgsf)