eclipseでLaravel開発環境を構築する。デバッグでブレークポイントをつけて止める。(WindowsもVagrantもdockerも)

# 目次
Laravelの記事一覧は下記
[PHPフレームワークLaravelの使い方](https://qiita.com/toontoon/items/c4d0371e504c37f6576e)

# Laravelバージョン
動作確認はLaravel Framework 7.19.1で行っています

# eclipseでLaravel開発環境を構築する
eclipseでのPHP開発環境は下記で構築しました
[eclipseでPHPの開発環境を構築する。デバッグでブレークポイントを付けてステップ実行できるようにする。](https://qiita.com/toontoon/items/f7340a259b7135952ac3)
本記事は上記が完了している前提で書かれています
これで通常のPHPの開発、デバッグはできるようになりましたが
今回はeclipseでLaravelを使ったPHPアプリケーションの開発をしていきます
ブレークポイントを付けてソース上の好きなところで一時停止してデバッグできるようにします

## Laravelプロジェクトを作成する
composerは事前にインストールしておいてください
[Composerをインストールする](https://qiita.com/toontoon/items/62a42ca2d05735a8c082)
まずはLaravelプロジェクトを作ります
コマンドラインで
`composer create-project --prefer-dist laravel/laravel sample`
sampleフォルダができ、その中にたくさんのファイルが出来上がっています

## Laravelプロジェクトをeclipseに取り込む
1. メニューバーのファイル→インポートをクリック
![a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238103/1816d109-9d79-cad6-20d3-457520848c82.png)

2. 既存のComposerプロジェクトをクリック
![b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238103/2dbba1de-6d3d-c054-cc48-673e6d10ae25.png)

3. お好きなプロジェクト名を入力し(今回はsample)、参照ボタンから先ほど作成されたsampleフォルダを選択します→完了ボタンクリック
![c.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238103/11de64fb-59c5-0dbc-b41f-db7c328bc073.png)

## httpd.conf修正
apacheのhttpd.confに下記を追記
eclipseのLaravelプロジェクトフォルダは自分のPC内のパスに置き換えてください
例：C:/eclipse_workspace/sample/public

```httpd.conf
Alias /laravelSample "eclipseのLaravelプロジェクトフォルダ/public"
<Directory "eclipseのLaravelプロジェクトフォルダ/public">
    Options FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>
```

## Controllerの作成
(1) コマンドラインで
`cd sample`
`php artisan make:controller SampleController --resource`
xdebugの設定をしているとeclipseが実行していいですかというプロンプトを出すのでOKを押します
eclipseプロジェクトを右クリック→リフレッシュ
/sample/app/Http/Controllers/SampleController.phpが現れます

(2) /sample/app/Http/Controllers/SampleController.phpのindexメソッドを下記に修正
`public function index()
{
    $data = ['key' => "value"];
    return view('sample.index', $data);
}`

return view('sample.index', $data)とすることで/sample/resources/views/sample/index.blade.phpが実行されます
第二引数でindex.blade.phpに値を渡しています
index.blade.phpの作成は後述します

(3) /sample/routes/web.phpに下記を追記
`Route::get('sample/index', 'SampleController@index');`
これでsample/indexというURLにGETリクエストが来た時にSampleControllerクラスのindexメソッドが実行されるようになります
POSTリクエストを処理したい場合はRoute::postを使用します

## viewの作成
1. /sample/resources/views/sampleフォルダ作成
2. /sample/resources/views/sample/index.blade.phpファイル作成

```index.blade.php
<html>
    <head>
        <title>sample</title>
    </head>
    <body>
        {{$key}}
    </body>
</html>
```

## 動作確認
`http://localhost/laravelSample/sample/index`
にアクセス
ブラウザにvalueと表示されればOK

## デバッグ
デバッグをしていきます
SampleControllerのindexメソッド内の行番号をダブルクリックしブレークポイントを付けます
index.blade.phpを右クリック→デバック→PHP Web アプリケーションをクリック
起動URLに
`http://localhost/laravelSample/sample/index`
を入力してOKボタンをクリック
**windows、XAMPP環境だと**ブレークポイントで止まりました。
しかし、**vagrant**や**docker**ではなぜかとまりませんでした。
### 困った挙句やったこと
eclipseを見ると
.buildpath
というファイルがプロジェクト直下にあります。今回だと/sample/.buildpath
composer.jsonのautoloadとrequireを元につくられたビルドパスです
eclipseのプロジェクトを右クリック→プロパティ→PHP>ソースパス>ビルドパスで確認できます
この.buildpathを開き、
`<buildpathentry kind="src" path=""/>`
という1行を追記しました

**これで`http://localhost/laravelSample/sample/index`にアクセスするとvagrantでもdockerでもブレークポイントで止まりました**

ただ、.buildpathに`<buildpathentry kind="src" path=""/>`を追記すると、当然ビルドパスはエラーを吐きます
ソースを開くとクラス名の下に赤い波線が出ています
.buildpathから`<buildpathentry kind="src" path=""/>`の1行を消しました
ビルドパスのエラーは消えました

**これでもう一回`http://localhost/laravelSample/sample/index`にアクセスしてみるとvagrantでもdockerでもブレークポイントで止まりました**

1回ブレークポイントで止めてしまえば、`<buildpathentry kind="src" path=""/>`の1行が無くても、eclipseが起動している間はブレークポイントで止まるようです

仕方がないので、1日1回デバッグ開始時に`<buildpathentry kind="src" path=""/>`追記、1回デバッグしたら`<buildpathentry kind="src" path=""/>`消すということをしています