Help us understand the problem. What is going on with this article?

Laravel で掲示板作りたくなった(3)

More than 3 years have passed since last update.

前回。Laravel で掲示板作りたくなった(2)

インスパイヤ元: インスパイヤされて掲示板を作りたくなった(3)

今回は、掲示板の一覧を出してみるよ。

ルーティング

GET /lists で掲示板の一覧を出力します。まずはルート定義。

app/Http/routes.php
<?php
Route::get('lists', function() {
    return '掲示板の一覧';
});

ではブラウザで確認してみましょう。

$ php artisan serve
Laravel development server started on http://localhost:8000/

して、http://localhost:8000/lists にアクセスすると 掲示板の一覧 と表示されていれば OK.
コマンドでルートの確認もできます。php artisan route:list とコマンドをたたくと…

$ php artisan route:list
+--------+----------+-------+------+---------+------------+
| Domain | Method   | URI   | Name | Action  | Middleware |
+--------+----------+-------+------+---------+------------+
|        | GET|HEAD | /     |      | Closure |            |
|        | GET|HEAD | lists |      | Closure |            |
+--------+----------+-------+------+---------+------------+

番外: Laravel で作るエラーページ

Laravel でエラーページ(404とか)を作るのは簡単で resources/views/errors/{statuscode}.blade.php をおけばよいだけです。404 の場合はresouces/views/errors/404.blade.php` を作ります。

resources/views/errors/404.blade.php
<!doctype html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>404 Not Found</title>
</head>
<body>
    <h1>404</h1>
</body>
</html>

こんな感じで作って、ルート定義されていない URL を叩くとこのページが表示されます。簡単。ついでにちょっとしたテストを書いてみましょう。

$ php artisan make:test NotfoundTest

とすると test/NotfoundTest.php というファイルが作られます。このファイルを下記のように修正…

tests/NotfoundTest.php
<?php

class NotfoundTest extends TestCase
{
    /**
     * 404 NotFound テスト
     *
     * @return void
     */
    public function testNotFound()
    {
        // notfound というルートにアクセス
        $result = $this->get('notfound');
        // 404 という文字列があるか
        $result->see(404);
        // ステータスコードは 404 か
        $this->assertEquals(404, $result->response->getStatusCode());
    }
}

で PHPUnit を実行すればよいです。

モデルを定義する

boards テーブルに対応するモデルを作成しましょう。php artisan make:model コマンドを使いましょう。

$ php artisan make:model Models/Board

とすると app/Models/Board.php が生成されます。

app/Models/Board.php
<?php

namespace InspireBBS\Models;

use Illuminate\Database\Eloquent\Model;

class Board extends Model
{
    //
}

掲示板の一覧を出力する

では、掲示板の一覧を出力する処理を書いていきましょう。

app/Http/routes.php
Route::get('lists', function(\InspireBBS\Models\Board $board) {
    return view('list', ['boards' => $board->all()]);
});

クロージャの引数に先ほど作成した Board クラスを設定してます。こうしておくと自動でインスタンスが生成されてインジェクションされるので楽ちん。で、view 関数の第2引数に boards というキーで boards テーブルの内容をすべて取得する all メソッドを呼んでます。これは View にデータを渡すためのものです。

あとは View を作れば完成。

resources/views/list.blade.php
@extends('layouts.default')

@section('content')
    <ul>
        @foreach($boards as $board)
            <li>{{ $board->name }}</li>
        @endforeach
    </ul>
@stop

レイアウトを継承して content セクションに掲示板の名前を出力しています。foreach ディレクティブ便利。

これで完成。 http://localhost:8000/lists にアクセスしてみましょう

inspire.png

できました! 続く!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away