CakePHPer のための Laravel 入門 - ブログチュートリアル2
CakePHPer のための Laravel 入門 - ブログチュートリアル1 - localdiskの続きです。
Postコントローラの作成
cake-to-laravel/app/controllers
に 投稿記事(posts)に対するコントローラを作成します。
<?php class PostController extends BaseController { }
全てのコントローラーは BaseController
クラスを拡張する必要があります*1。では、一つメソッドを作って呼び出してみましょう。
<?php class PostController extends BaseController { public function getIndex() { // URL を echo する echo Request::url(); } }
コントローラを呼び出すのにはルートの定義が必要です。cake-to-laravel/app/routes.php
を以下のように編集します。
<?php // コントローラを登録 Route::controller('posts', 'PostController');
では、http://localhost:8000/posts/index
をブラウザでアクセスしてみましょう。アクセスした URL が表示されるはずです。
次は前回作成したモデルを表示させてみましょう。コントローラを以下のように編集します。
<?php class PostController extends BaseController { public function getIndex() { return View::make('posts.index', ['posts' => Post::all()]); } }
Post ビューの作成
Post モデルの内容を表示するシンプルなビューを作りましょう。ビューの設置場所は cake-to-laravel/app/views
になります。今回はそこに posts
というフォルダを作ってその中に index.php
というファイルを作りましょう。
<h1>Blog posts</h1> <table> <tr> <th>Id</th> <th>Title</th> <th>Created</th> </tr> <!-- ここから、$posts配列をループして、投稿記事の情報を表示 --> <?php foreach ($posts as $post): ?> <tr> <td><?php echo $post->id; ?></td> <td> <!-- link_to_action を使うと定義されていなければエラーになる --> <?php echo link_to("posts/view/{$post->id}", $post->title) ?> </td> <td><?php echo $post->created_at ?></td> </tr> <?php endforeach; ?> </table>
シンプルですよね。煩わしい配列がないところが特に。
ビューの中のリンク(投稿記事のタイトルから/posts/view/some_idというURLへのリンク)をクリックすると、Laravelは、そのアクションはまだ定義されていません、エラー画面を表示します。*2
では、エラーを撲滅するべく表示用のメソッドを実装しましょう。
<?php class PostController extends BaseController { public function getIndex() { return View::make('posts.index', ['posts' => Post::all()]); } public function getView($id) { // この状態だと $id が URL に付加されてない場合は ErrorException が発生する // $id あってもなくてもよい場合は getView($id = null) とすればよい // Model::findOrFail を使うとモデルが見つからなかった場合 // ModelNotFoundException を発生させる return View::make('posts.view', Post::findOrFail($id)); } }
記事の追加
続きはあとで。