さて、いよいよCRUDシステムを作っていきます。
基本の順序としては、ルーティングを設定→コントローラを設定→(モデルを設定)→表示、となります。
まずは、表示確認を行っていきましょう。
表示確認
ルーティング設定
web.phpに下記のように、二行を追記してください。(コメントアウトされてるものはややこしいので消してしまいました。)
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\TodoController; //追記 この場所にあるTodoControllerを使うよ、ということ。
Route::get('todo/index', [TodoController::class, 'index'])->name('todo.index'); //追記
コントローラを設定
次にTodoControllerのindexのところに、下記のように記載してください。
public function index()
{
return view('todo.index'); //追記
}
これで、indexメソッドが実行されたらtodo.indexのviewを表示する、設定ができました。
ビューを設定
実際に表示する画面を作成します。
resources>viewsの中にtodoフォルダを作り、そのフォルダ直下にindex.blade.phpというファイルを作成します。
index.blade.phpは、表示画面なので、一旦下記のように書いておきましょう。
<h1>indexです</h1>
<p>ここにtodo一覧が表示されます</p>
画面表示を確認
(ローカルサーバURL)/todo/index にアクセスし、画面表示を確認してみましょう。
今回はここ(http://127.0.0.1:8000/todo/index)にアクセスします。
このように表示されていたら、画面表示の確認は完了です!
DBからデータを取得し表示する
では、今作成したindex.blade.phpにデータを表示してみます。
データを取得する
まずはデータを取得するためコントローラに下記のように書きます。
指定したデータを取得し変数に入れ、その変数をビューに渡す記述です。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Todo; //モデルと接続
use Illuminate\Support\Facades\DB; //追記
class TodoController extends Controller
{
public function index()
{
//todosテーブルのデータからid,content,doneのデータを選び取得する。
//それを変数todosに入れる
$todos = DB::table('todos')
->select('id','content','done')
->get();
//compactでビューに変数todosを渡す
return view('todo.index', compact('todos'));
}
//create以下は省きます
ビューファイルに表示する
取得したデータをビューファイルに渡せたので、表示してみます。
@foreach($todos as $todo) <br>
{{ $todo->id }}
{{ $todo->content }}
{{ $todo->done }}
@endforeach
一旦これで取得したデータが表示されていれば成功です!
見た目を整える
ここでは、デザイン詳細には触れませんが、最低限整うようにbootstrapを入れています。
※Laravelでbootstrapを使う方法は、こちらの記事( Be Engineer「Laravelを使用したbootstrapの使い方!レイアウトの作成方法」)がわかりやすかったです。
下記のようにindex.blade.phpを編集してください。
<div class="container-sm">
<link href="{{ asset('css/app.css') }}" rel="stylesheet">
<h1>indexです</h1>
<pre>ここにtodo一覧が表示されます</pre>
<table class="table">
<thead>
<tr>
<th scope="col">id</th>
<th scope="col">内容</th>
<th scope="col">対応済みかどうか</th>
</tr>
</thead>
<tbody>
<!-- ここからデータを表示してます -->
@foreach($todos as $todo)
<tr>
<th>{{ $todo->id }}</th>
<td>{{ $todo->content }}</td>
<td>{{ $todo->done }}</td>
</tr>
@endforeach
</tbody>
</table>
</div>
このように表示されていれば成功です!
これで、CRUDシステムのRead…一覧を表示するができました!
お疲れ様でした!