インスパイヤ元: インスパイヤされて掲示板を作りたくなった(3)
今回は、掲示板の一覧を出してみるよ。
ルーティング
GET /lists
で掲示板の一覧を出力します。まずはルート定義。
<?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` を作ります。
<!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
というファイルが作られます。このファイルを下記のように修正…
<?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
が生成されます。
<?php
namespace InspireBBS\Models;
use Illuminate\Database\Eloquent\Model;
class Board extends Model
{
//
}
掲示板の一覧を出力する
では、掲示板の一覧を出力する処理を書いていきましょう。
Route::get('lists', function(\InspireBBS\Models\Board $board) {
return view('list', ['boards' => $board->all()]);
});
クロージャの引数に先ほど作成した Board
クラスを設定してます。こうしておくと自動でインスタンスが生成されてインジェクションされるので楽ちん。で、view
関数の第2引数に boards
というキーで boards
テーブルの内容をすべて取得する all
メソッドを呼んでます。これは View にデータを渡すためのものです。
あとは View を作れば完成。
@extends('layouts.default')
@section('content')
<ul>
@foreach($boards as $board)
<li>{{ $board->name }}</li>
@endforeach
</ul>
@stop
レイアウトを継承して content
セクションに掲示板の名前を出力しています。foreach
ディレクティブ便利。
これで完成。 http://localhost:8000/lists
にアクセスしてみましょう
できました! 続く!