Laravelのルーティングからコントローラを呼出し、値をビューに渡す

今回はルーティング経由でコントローラを呼び出し、さらにそこからビューを表示してみましょう。
イメージでいうと以下の通りです。

ユーザがブラウザで/usersにアクセスしたら、ルーティングを呼び出して、そこからコントローラ、ビューを呼び出すといった流れを作っていきます。
今回編集するファイルは3ファイルだけです。

Laravelではコントローラはどこのディレクトリにおくとか、ビューはどこにおくとかが予めある程度きまっています。そのルールに従って今回も作成していきます。
最初ディレクトリ構成が難しいと感じるかもしれませんが、プログラムを書いていくうちに慣れます。
ルーティング→コントローラ→ビューを作成
ルーティングを記述
まずはhttpメソッドGETで/usersにアクセスしたら、UserControllerのallUsersというメソッドを呼ぶ処理を書きます。
routes/web.php
<?php
Route::get('/users', 'UserController@allUsers');
UserControllerというコントローラのallUsers()メソッドを呼び出すという処理ですね。
コントローラ作成
まだコントローラは無いのでUserControllerというコントローラを作成します。
app/Http/Controllers/UserController.php
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
class UserController extends Controller
{
public function allUsers()
{
return view("users/all");
}
}
return view("users/all");でビューを呼び出しています。
ビュー作成
ビューは〇〇.blade.phpというファイル名で作成します。
resources/views/users/all.blade.php
ユーザ一覧のビュー
最初は文字だけかいておきます。
それはブラウザで/usersにアクセスしてみましょう。すると以下のようにビューに書いた文字が表示されると思います。

ここまでの流れを図にまとめると以下のようになっています。

コントローラからビューに値を渡す
例ではビューに文字を表示しているだけですが、これだとあまりコントローラを挟んだ旨味がないので、コントローラからいろいろな値を渡してみましょう。
UserController.php
public function allUsers()
{
$value = "たけし";
return view("users/all", ["name" => $value]);
}
連想配列でviewの第2引数に渡したい値を渡します。
resources/views/users/all.blade.php
ユーザ一覧のビュー
<div>{{ $name }}</div>
ビュー側では{{}}を使って$nameで値にアクセスできます。ちゃんと値が渡され表示されるのがわかります。

リストを渡して表示してみる
次はユーザ名のリストを渡して見ましょう。
resources/views/users/all.blade.php
public function allUsers()
{
$users = [
"たけし",
"ボブ",
"トム",
"ジャック"
];
return view("users/all", ["users" => $users]);
}
resources/views/users/all.blade.php
ユーザ一覧のビュー
@foreach($users as $user)
<div>{{ $user }}</div>
@endforeach
@foreachで配列を繰り返して値を取り出すことができます。@endforeachまでが繰り返される感じです。
今回の例だと<div>{{ $user }}</div>これが4名分繰り返されます。
以下のように表示されます。

少し工夫して以下のようにulタグとliタグを使って見ると
resources/views/users/all.blade.php
ユーザ一覧のビュー
<ul>
@foreach($users as $user)
<li>{{ $user }}</li>
@endforeach
</ul>
ユーザの名前がリストで表示されます。

繰り返しの処理は慣れないと最初イメージがしずらいので、何度も何度も書き直して動きを理解していきましょう。
次回はモデルについて見ていきます。モデルが一番むずかしいと思います。
モデルにはビジネスロジックを扱う側面とデータを扱う側面がありますが、話をシンプルにするため、このシリーズではデータを扱う側面に絞って解説していきます。
ビジネスロジックを扱う側面については中級編とかでまた解説します。