Laravel 10 入門トップページ


目次

  1. プロジェクトを作成する
  2. データベースファイルを作成する
  3. Visual Studio Code を設定する
  4. .env を編集して初期設定する
  5. タイムゾーンと言語を設定する
  6. Webサーバを起動して終了する
  7. マイグレーションファイルを生成する
  8. テスト用データを設定する
  9. モデルを作成する
  10. コントローラを作成する
  11. ルートを定義する
  12. データベースからデータを取り出す
  13. トップページにリンクを設置する
  14. ビューを使ってレコードを表示する
  15. コメントを個別に表示するページを作成する
  16. コメント投稿機能を実装する
  17. 投稿内容を検証する
  18. 投稿内容を編集する
  19. 投稿コメントを削除する
  20. テストの自動化を実現する
  21. テストカバレッジを計測する
  22. 複数のLinuxコマンドを実行し,履歴からも実行する
  23. ビューをレイアウト化する
  24. Bootstrap を導入する
  25. SQLite を操作する
  26. フェイカでシーダを拡張する
  27. ページネーションを作る
  28. シーダに登録日時と更新日時を追加する
  29. 一覧表示を更新日時の降順にする
  30. フラッシュメッセージを表示する
  31. スタイルシートでデザインを整える

Laravel によるコメント掲示板の開発

ビューを使ってレコードを表示する

コントローラでデータベースのテーブルから全てのレコードを取り出すことができたので,この結果をビューに渡して実際にブラウザに一覧で表示してみよう.ビューはユーザに対して情報を出力する役割を担当します.

では,実際にコントローラからビューにデータを渡すように CommentsController.php を編集します.index 関数では $comments オブジェクトに全てのレコードが格納されているので,comments.index というビューに comments パラメータを渡します.具体的には次のように記載します.なお,comments.index とは,resources/views/comments ディレクトリにある index.blade.php を呼び出すという意味であることに注意してください.またパラメータは with を使ってビューに渡します.

app/HTTP/Controllers/CommentsController.php(抜粋)
    public function index()
    {
        $comments = Comment::get();    // SELECT * FROM comments; のイメージ
        return view('comments.index')
                ->with('comments', $comments);
    }

ビューは resources/views ディレクトリに保存されています.Laravel では独自の Blade テンプレートエンジンを利用することができます.Blade を利用するためには,ファイル名を「ビュー名.blade.php」とします.上では,comments.index と指定したことから,resources/views ディレクトリに comments サブディレクトリを作成し,index.blade.php ファイルを次のように作成します.

resources/views/comments/index.blade.php
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>コメント一覧</title>
</head>
<body>
    <h1>コメント一覧</h1>
</body>
</html>

Web サーバを起動して,トップページ /comments にアクセスしてみます.(Web サーバを終了するには Ctrl + C を押下してください)

vagrant@ubuntu2204 comment_app $ php artisan serve --host=192.168.56.101 --port=8000 ⏎

   INFO  Server running on [http://192.168.56.101:8000].

  Press Ctrl+C to stop the server

ビューではまだコントローラから渡された情報を利用していません.見出しだけが表示されました.

laravel10-2023-comment-18.png

では,コントローラから受け取った情報をビューで表示してみます.渡されたパラメータは Comment クラスの配列形式になっているはずなので,@foreach を使って順番に取り出してタイトルだけを箇条書きで表示してみます.このために,index.blade.php を次のように編集します.Blade では変数の中身を表示するために {{ }} を用います.この方法で出力される内容は XSS(クロスサイトスクリプティング)攻撃を防ぐためにタグの記号などがエスケープされるため,安心して利用できます.

resources/views/comments/index.blade.php
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>コメント一覧</title>
</head>
<body>
    <h1>コメント一覧</h1>
    <ul>
        @foreach ($comments as $comment)
            <li>{{ $comment->title }}</li>
        @endforeach
    </ul>
</body>
</html>

Web サーバを起動して,トップページ /comments にアクセスしてみます.(Web サーバを終了するには Ctrl + C を押下してください)

vagrant@ubuntu2204 comment_app $ php artisan serve --host=192.168.56.101 --port=8000 ⏎

   INFO  Server running on [http://192.168.56.101:8000].

  Press Ctrl+C to stop the server

コメントのタイトルが一覧で表示されることが確認できました.また,出力された HTML ソースも確認してください.{{ $comment->title }} で出力された HTML ソースは,12行目のようにタグ記号が自動的にエスケープされています.

laravel10-2023-comment-19.png

目次に戻る