Visual Studio CodeでLaravelをデバッグする設定【Docker Compose編】

前回、[Visual Studio CodeでLaravelをデバッグする設定【Vagrant編】](https://qiita.com/_bobtabo_/items/185475f43d438cd3562d)を書きましたが、今回はDocker Compose環境でのデバッグ設定です。

# マシンスペック
* Mac mini 2018
* macOS Catalina（10.15.x）
* Intel Core-i7 3.2GHz 6コア
* メモリ 32GB
* SSD 512GB

# Docker環境
* Nginx 最新版
* PHP（PHP-FPM） 7.4.x
* MySQL 8.x
* Composer 2.x
* Laravel 8.x
* Redis 最新版
* MailHog 最新版


# やること
* Docker Compose環境のVSCodeデバッグ設定

# 前提
このポート環境を満たしてないと、多分ブレークポイント止まらない。
[Docker ComposeでLaravel開発環境を構築その肆#IDEでブレークポイント止める為の準備](https://qiita.com/_bobtabo_/items/2afe45d78ca45951e64f#ide%E3%81%A7%E3%83%96%E3%83%AC%E3%83%BC%E3%82%AF%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88%E6%AD%A2%E3%82%81%E3%82%8B%E7%82%BA%E3%81%AE%E6%BA%96%E5%82%99)

# Docker環境の準備
[Docker ComposeでLaravel開発環境を構築その伍#使い方](https://qiita.com/_bobtabo_/items/e76a14bd7ed65b5e34b1#%E4%BD%BF%E3%81%84%E6%96%B9)

# デバッグするコードの準備

ブレークポイントを止めなきゃなので、WelcomeページをController経由に修正。

### routes/web.phpを編集

```php:routes/web.php
use Illuminate\Support\Facades\Route;
・・・
Route::get('/', function () {
    return view('welcome');
});
```
↓ 下記に編集。

```php:routes/web.php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Web\WelcomeController;
・・・
Route::group(['namespace' => 'Web'], function () {
    Route::get('/', [WelcomeController::class, 'index']);
});
```

### WelcomeControllerを作成

```php:app/Http/Controllers/Web/WelcomeController.php
<?php

namespace App\Http\Controllers\Web;

use App\Http\Controllers\Controller;

class WelcomeController extends Controller
{
    public function index()
    {
        return view('welcome');
    }
}
```

# デバッグする

### 拡張機能をインストール

* 拡張機能を開きます
* <font color="blue">**php**</font>で検索します
* <font color="blue">**PHP Debug**</font>をインストールします
![スクリーンショット 2020-08-18 1.21.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111551/d962f069-1f7f-b5d2-57aa-2c7cb7b84594.png)

### デバッグ設定

1. デバッグするLaravelプロジェクトを開きます
2. 左メニューの好きな所を右クリックします
3. <font color="blue">**実行**</font>をクリックします
![スクリーンショット 2020-08-18 1.36.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111551/604ca0e6-6fc9-e8b3-5a4f-b19f25c40113.png)
4. <font color="blue">**launch.json ファイルを作成します**</font>をクリックします
5. <font color="blue">**PHP**</font>をクリックします
![スクリーンショット 2020-08-18 1.45.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111551/dd2a4b5b-e3b2-7f07-8e7b-1933aad25a26.png)
6. Laravelプロジェクトに追加されます
![スクリーンショット 2020-08-18 1.59.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111551/ac2ff032-49fd-bf31-2b3a-5e60c330aa58.png)
7. <font color="blue">**launch.json**</font>を編集します
![スクリーンショット 2021-04-07 19.32.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111551/63ff769b-5e82-6063-da73-926e47962066.png)
8. 赤枠を下記に変更します。

```json
{
    "name": "Listen for Xdebug",
    "type": "php",
    "request": "launch",
    "port": 9001,
    "pathMappings": {
        "/home/docker/laravel": "${workspaceRoot}"
    }
},
```

### デバッグ

デバッグ操作は下記を参考にする。
[Visual Studio CodeでLaravelをデバッグする設定【Vagrant編】#デバッグ](https://qiita.com/_bobtabo_/items/185475f43d438cd3562d#%E3%83%87%E3%83%90%E3%83%83%E3%82%B0)

##### 「Illuminate\Contracts\Encryption\DecryptException: The payload is invalid.」対応

<font color="red">ページアクセスすると、下記の例外に引っ掛かるかも知れません。</font>
![スクリーンショット 2021-04-07 17.19.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111551/1ac5b77e-9bce-39b8-657f-cc04d8af07ff.png)

###### 対応方法

1. F12もしくは右クリック→「検証」で、デベロッパーツールを開きます。
1. Applicationタブ→左側リストの「Cookies」→該当URLを選択すると、右側にリストが表示されます。
![スクリーンショット 2021-04-07 17.28.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111551/860ebe3d-9000-2888-7ce0-a37cd77dd5b0.png)
1. 右側リストの「Name」を「app/Http/Middleware/EncryptCookies.php」ファイルに追加します。
![スクリーンショット 2021-04-07 17.32.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111551/0ca15420-aeb5-d1b8-f1b1-1b06a9cc0568.png)

再度ページアクセスすると、ブレークポイント置いた箇所に止まります。
![スクリーンショット 2021-04-07 17.37.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111551/a85cf7b1-d75b-b050-8c49-397d6eb63ca6.png)

※参考
[【Laravel6】Xdebug実行で”The payload is invalid”と出る場合の対処方法（pgAdminを使用している場合)](https://programming.sincoston.com/laravel6-xdebug-payload-invalid/)