速習Larave3(その1)、レコードの表示
タグ: Laravel3
Laravelの使い方を説明するショートチュートリアルシリーズです。
初回は、記事を表示するだけのミニブログです。
Laravelの準備は説明しません。
postsテーブル作成
今回はORMを利用します。PostモデルとしてDBのアクセスを行いたいため、テーブル名をposts
とします。
まずは、Artisanコマンドラインツールでマイグレーションを作成します。端末で以下のコマンドを実行してください。
- 参照:マイグレーション
php artisan migrate:make create_posts_table
application/migrations
フォルダーに日時に続いてcreate_posts_table
を含んだPHPファイルが作成されます。エディターで開き、以下の内容に書き換えてください。
- 参照:スキーマビルダー
<?php class Create_Posts_Table { /** * Make changes to the database. * * @return void */ public function up() { Schema::create('posts', function($table) { $table->increments('id'); $table->string('title', 50); $table->string('body', 8000); $table->timestamps(); }); } /** * Revert the changes to the database. * * @return void */ public function down() { Schema::drop('posts'); } }
マイグレーションを実行します。まず最初に、マイグレーションの管理テーブルを作成します。これはLaravelが管理に使用するものです。次のコマンドを実行してくださ い。これは初回に一度だけ実行してください。
php artisan migrate:install
続いて、先ほど作成したマイグレーションを実行します。次のコマンドを実行してください。それにより未実行のマイグレーションが(今回はひとつだけですが)実行されます。
php artisan migrate
これでpostsテーブルが作成されました。確認してください。
続いて、記事を作成しましょう。まだ、入力ページは作成しません。再度マイグレーションを使用し、作りましょう。これで、初期データーを用意する方法(シーディング)を学 べます。まずはコマンドでマイグレーションを生成します。
php artisan migrate:make insert_first_post
生成されたマイグレーションをエディターで開き、以下の内容を入力してください。
<?php class Insert_First_Post { /** * Make changes to the database. * * @return void */ public function up() { DB::table('posts') ->insert( array( 'title' => '最初のポスト', 'body' => 'なるほどだ、世界', 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s'), )); } /** * Revert the changes to the database. * * @return void */ public function down() { DB::table('posts') ->where('title', '=', '最初のポスト') ->delete(); } }
続いてORMモデルを作成します。ORMモデルとは、SQL文を直接記述せず、テーブルのレコードを表すクラスのインスタンスを通じて、更新、追加、削除処理を行う仕組みです。application/models/post.php
を作成してください。コードは以下の通りです。
- 参照:Eloquent ORM
<?php class Post extends Eloquent { public static $timestamps = true; }
Eloquent ORMは、テーブルの単数形のクラス名でEloquentクラスを拡張するだけで、働いてくれます。timestampsプロパティはタイムスタンプフィールドを自動的に更新する指定です。(デフォルトでtrueなので、指定しなくても同じ動作をします。)記事などは保存した時間が大切な情報になりますので、付けましょう。大抵のテーブルには付けておきましょう。バグ修正やリカバリー時に役立つ情報です。
では内容を表示するビューを作成しましょう。application/views
フォルダーにpost
サブフォルダーを作成してください。その中にshow.blade.php
ファイルを作成し、以下の内容で保存してください。LaravelのテンプレートエンジンであるBladeを使用しています。
<!doctype html> <html lang="ja"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <title>ポスト表示</title> <meta name="viewport" content="width=device-width"> {{ HTML::style('laravel/css/style.css') }} </head> <body> <div class="wrapper"> <header> <h1>ミニブログ</h1> <h2>記事表示</h2> <p class="intro-text" style="margin-top: 45px;"> </p> </header> <div role="main" class="main"> <div class="home"> <h2>{{ $title }}</h2> {{ $body }} </div> </div> </div> </body> </html>
最後にルートを定義します。application/routes.php
をエディターで開き、全体を以下のように書き換えてください。
<?php Route::get('/', function() { $post = Post::find(1); return view('post.show') ->with('title', $post->title) ->with('body', $post->body); }); Event::listen('404', function() { return Response::error('404'); }); Event::listen('500', function() { return Response::error('500'); }); Route::filter('before', function() { // Do stuff before every request to your application... }); Route::filter('after', function($response) { // Do stuff after every request to your application... }); Route::filter('csrf', function() { if (Request::forged()) return Response::error('500'); }); Route::filter('auth', function() { if (Auth::guest()) return Redirect::to('login'); });
ルートルート(root route)つまり、ドメイン名だけでブラウザからアクセスした場合のルートで、今作成したPostクラスを使用し、最初のレコードを表示します。
実際にブラウザからアクセスして、試してください。もし、仮想ホストのドメイン名(マシン名)の設定がsample.devでしたらhttp://sample.dev
にアクセスします。ドキュメントルートはpublicフォルダーを指定しておいてください。
マイグレーションで作成した最初のレコードが表示されます。