速習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フォルダーを指定しておいてください。
マイグレーションで作成した最初のレコードが表示されます。