【独学メモ】- laravelのコントローラーとルーティング処理 -

# 前書き
この記事は自分のための学習アウトプットメモです。
職場でphpを利用してシステムを運用しているので、ある程度の知識を得ておきたいと思い学習を開始しているだけなので、どうぞ暖かく見守ってくれたら嬉しいです。

# この記事の目的
laravelのコントローラーの作成と、ルーティングを記述して、必要なviewを表示するまでの基本的な実装について記載します。

## 工程
この記事で達成したい目的のための工程はこんな感じ。
1. コントローラーファイルを作る
2. ルーティング処理をroutesディレクトリ配下のファイルに記述する
3. 作成したコントローラーファイルに処理を記述する
4. 表示したいviewファイルを作成する

さぁ〜やってきましょ〜！

# C - Controllerについて
そもそもコントローラーって何か。
→ 何かしらの処理をしてあげる場所（超ざっくり）

例えば、一覧画面とかを表示するなら、条件に合わせて欲しい情報を取得できるように処理したりします。
入力フォームで入力した値を保存したりすることも担当します。

# 工程.1 コントローラーの作り方
モデル作成時とほぼ一緒で、ターミナル上から以下のコマンドを実行すれば作成可能です。
コマンドを実行すると`app/Http/Controllers`配下に作成されます。
実行する場合はもちろん、cdコマンドで目的のプロジェクトのディレクトリまで移動してから行う様に注意。
`pwd`コマンドで現在地確認してから実行する癖をつけような自分。


```ターミナル
php artisan make:controller {コントローラーの名前}
# ※今回は"TestController"を作成するので、実際のコマンドは↓。
# php artisan make:controller TestController
```
ここまでやったら、今度は作ったコントローラーを利用できるようにルーティングを実装する必要があります。

# 工程2.ルーティングの設定
このURLでアクセスされたら、こうしてね。を書く場所です。
今回は`routes/web.php`に`tests/testってURLにアクセスされたら、このコントローラーのこのメソッドを利用してね`　を記述します。

## 1.まずは、作ったコントローラーを使えるようにする
工程1で作成したコントローラー`routest/web.php`上で認識させる必要がある。
そのために、useを使って、作成したコントローラーを記述してあげましょう

```web.php
// ↓これはもともと書かれていると思う
use Illuminate\Support\Facades\Route;

// use で作ったコントローラーを利用できるように以下を追記
use App\Http\Controllers\TestController;
```

### 解説 
おそらく、`TestController.php`ファイルの中にデフォルトでnamespaceが記述されていると思います。
```TestController.php
// こんな感じのが書かれているはず↓
namespace App\Http\Controllers;
```
これつまり何を言ってるかってゆーと、「このファイルを使いたい時はここを指定してあげてね」って言ってる感じです。
ので、`web.php`ファイルで使えるように、use文で namespace + ファイル名 といった形で記載してあげてるってことになります。

## 2.'tests/test'というurlへアクセスされた時にどうするかを記述する
厳密にいうと、GETメソッドで`tests/test`というurlへアクセスされた時。って感じになるかとは思う。
ブラウザのURLバーに直接url記述すると大体GETで呼び出すことになるので≒URL直接打った時。くらいの感覚でいいかも。今は。

```web.php
// 多分もともと書かれてる↓
Route::get('/', function () {
    return view('welcome');
});

// 今回記述する内容↓
Route::get('tests/test',[TestController::class, 'index']);
```

### 解説
さっき少し触れた、getメソッドだった時どうするか。という記述をしています。
`get()`というメソッドの中に引数を２つ指定する必要があって、その記述を持って具体的に何をするのかが決まるイメージ。
- 第一引数:アクセスされたURL。今回の場合は`~~~~/tests/test`というURLにGETでアクセスされた時を指定することになってます。
- 第二引数、配列を指定してあげてますね。配列の0番目に対象のコントローラー、1番目に文字列を指定してます。この文字列はControllerのメソッド名になります。まだ記述してないからこの後そこについては触れます。

# 工程3.作成したコントローラーファイルに処理を記述する
TestController.phpに戻って処理を記述します。
先ほど`web.php`で以下の記述をしたので、それに対応するメソッドを作成する必要があります。
今回は第二引数の配列の中で`index`を指定しているので、indexメソッドを作成する必要がありますね。

```web.php
// 第二引数の配列の中で `index`を指定しているので、それに対応するメソッドをTestControllerの中に記述する必要がある
Route::get('tests/test',[TestController::class, 'index']);
```

## indexメソッドを記述する
indexを作成します。
その時に、このメソッドの処理として何をするのかも書いてあげる必要があるのですが、今回はviewを表示してあげることにします。

それを踏まえて、全体像はこんな感じになります。
```TestController.php
class TestController extends Controller
{
    public function index(){
        return view('tests.test');
    }
}
```

### 解説
indexメソッドを作成したのですが、その中でreturnでviewメソッドを指定しています。
viewメソッドは何をしているのかっていうと、`resources`ディレクトリの中から、引数で指定されているファイルをviewとして使いますよ。的な処理をしています。

今回は想定として、`resouces/tests/test.blade.php`ファイルを利用しようとしているので、引数に`tests.test`を指定しています。
例えば、`resouces/aiueo.blade.php`ファイルを利用するのであれば、`aiueo`だけになるわけですな。

# 工程4.表示したいviewファイルを作成する
工程3のindexメソッドで、returnとして`tests.test`を指定したので、それに該当するファイルを作成してあげます。じゃないと多分500 Server errorになっちゃう。

1. appディレクトリ配下にあるresourcesファイルの中に`tests`フォルダを作成する
2. `tests`フォルダの中に`test.blade.php`を作成する
3. `test.blade.php`ファイル内に任意の文字列を入力する 
4. URLバーに`127.0.0.1:8000/tests/test`を入力する

これで、3で入力した任意の文字列がブラウザ上に表示されていれば、無事にルーティング→コントローラーで処理→viewとしてブラウザに表示。という処理が成功していることになる。
できたねーやったぜ。

# 最後に
基本的に自分向けのメモなので、参考にする方などはいらっしゃらないと思いますが、
もしどなたか有識者がこの記事を目にして「あ、いやなんかそこ認識違うぞ」と思う箇所あればご指摘いただければ幸いですm(_ _)m
（そのためにあえてこの駄文を公開設定しているので・・・笑)