Laravel

【Laravel】掲示板を作成する(3)一覧画面、詳細画面の作成

Laravelによる掲示板の作成、第3回です。
今回は「一覧画面の作成」と「詳細画面の作成」についてポストしたいと思います。

5.一覧画面の作成

まずは一覧画面を作成します。

コントローラーの作成

以下のコマンドを発行して、コントローラーファイルを生成します。
実行すると app\Http\Controllers\PostsController.php が作成されます。

ルーティングの設定

編集ファイル:routes\web.php
開発版の接続先URLは http://localhost:8000/bbs/ となるよう設定。

Postsコントローラーを編集

編集ファイル:app\Http\Controllers\PostsController.php

投稿を作成日時の降順で取得し index.blade にデータを渡してビューを生成する内容です。

Laravelのローカルサーバーを起動するのを忘れずに。

ビューの作成

以前作成した「star」ページ用のレイアウトファイルをコピーして bbslayout.blade.php を作成。Bootstrapを使えるようヘッダにCDNのリンクを記述します。

各ビューファイルは以下の様に設置作成します。

# レイアウト用
resources/views/layout/bbslayout.blade.php

# ヘッダ、フッター
resources/views/layout/bbsheader.blade.php
resources/views/layout/bbsfooter.blade.php

# 一覧用
resources/views/bbs/index.blade.php

レイアウト

編集ファイル:resources/views/layout/bbslayout.blade.php

ヘッダ

編集ファイル:resources/views/layout/bbsheader.blade.php

フッタ

編集ファイル:resources/views/layout/bbsfooter.blade.php

フッタ用CSSを作成

編集ファイル:public\css\bbs\sticky-footer.css

一覧画面

編集ファイル:resources/views/bbs/index.blade.php

foreachでデータをぐるぐる回すのが基本形。
$post->***の形式で、表示させたい項目を指定します。

「カテゴリ」はモデルにてリレーション設定が行われているので、{{ $post->category->name }}で取得(表示)可能です。

メッセージは改行に対応しつつ80文字で省略されるようにしており、コメント数は{{ $post->comments->count() }}で取得できるようです。
このあたりの関数の仕様一覧が見たいところ。

一覧画面キャプチャ

ここまでの内容を実行させると、以下のように50件全件を表示しています。
Bootstrapを使用しているので、レスポンシブに対応。相変わらずボタンの色が少々やかましいのがそれっぽいですね。

掲示板というか管理画面感がありすぎたので、あとで『KENT-WEB』風を目指してみることにしますが、ひとまずはこのまま進めることとします。

6.詳細画面の作成

では次に投稿の「詳細画面」を実装します。

ルーティングの追加

routes/web.php を開き、showメソッドにルーティングが通るよう設定します。

get ではなく resource を使うこととします。
第三引数に only を使うと、ホワイトリストとしてメソッドを指定できます。

Route::resourceについては以下を参照。

Postsコントローラーを編集

showアクションを作成します。

編集ファイル:app\Http\Controllers\PostsController.php

詳細画面ビューの作成

編集ファイル:resources\views\bbs\show.blade.php

一覧画面の「詳細ボタン(リンク)」を編集

これで、http://127.0.0.1:8000/bbs/1 というようなURLで詳細が開きます。(なんだか気持ち悪いですねw)

リンク作成に関しては下記URLを参照。

詳細ページキャプチャ

一覧ページにページ送り(ページネーション)を追加

現状の投稿一覧だと投稿が増えていくとスクロールが若干大変なので、ページ送りをつけてみます。
PostsControllerindexメソッド内にて、投稿リストを取得する処理を以下のように変更します。

次に一覧画面用のビューの任意の位置(今回は投稿リストの下の方)にページ送り用のブロックを追記。

編集ファイル: resources/views/posts/index.blade.php

ページングされた一覧画面のキャプチャ

恐ろしく簡単にページ送りが出来てしまった。。。
CakePHPではなかなか苦労したところなんですけどねぇ。Laravel恐るべし。

というところで第3回目はここまでとします。
次回は投稿作成とコメント投稿についての予定です。

-Laravel
-,