WinRoadのLaravel4初心者講座

次世代PHPフレームワークのLaravel4を初心者向けに解説して参ります。

Winroad徒然草の管理人がお届けします
Generatorsでリソースとスキャフォールドの生成

Generatorsでリソースとスキャフォールドの生成

このエントリーをはてなブックマークに追加

Generatorsのリソースコマンドは、model、view、controller、migration、table seeder、databaseを同時に生成してくれます。リソースとスキャフォールドではどこが違うのか調べてみたいと思います。

リソースの生成

コマンドプロンプトから、下記のコマンドを実行してみます。

php artisan g:r post --fields="title:string, body:text"

すると、モデルを生成しますかと尋ねてきますので、yesかyを入力します。

Do you want me to create a Post model?[yes|no]y

モデルを生成した後に、「Postリソースのビューを生成しますか」と尋ねてきますので、yを入力します。

Created:C\xampp\htdocs\laravel\app/models/Post.php
 Do you want me to create views for this Post resource?[yes|no]y

index、show、create、editの各ビューを生成した後に、「PostControllerを生成しますか」と尋ねてきますので、yを入力します。

Created:C\xampp\htdocs\laravel\app/views/posts/index.blade.php
 Created:C\xampp\htdocs\laravel\app/views/posts/show.blade.php
 Created:C\xampp\htdocs\laravel\app/views/posts/create.blade.php
 Created:C\xampp\htdocs\laravel\app/views/posts/edit.blade.php
 Do you wont me to create a PostController controller?[yes|no]y

コントローラーを生成した後に、「このリソースのマイグレーションとスキーマを生成しますか」と尋ねてきますので、yを入力します。

Created:C:\xampp\htdocs\laravel\app/controllers/PostsController.php
Do you want me to create a 'crate_posts_table' migration and schema for this resource?[yes|no]y

マイグレーションを生成した後に、「Postsテーブルのシーダーは必要ですか」と、尋ねてきますので、yを入力します。シーダー(自動生成される初期値)が不必要な場合は、nを入力します。ここは、yを入力してみます。

Created:C\xampp\htdocs\laravel\app/database/migration/日付_created_posts_table.php
Generating optimized class loader
Would you like a 'Posts' table seeder?y

シーダーを生成した後に、「データベースを生成しますか」と尋ねてきますので、yを入力します。

Created: C:\xampp\htdocs\laravel\app/database/seeds/PostsTableSeeder.php
Do you want to go ahead and migrate the database?[yes|no]y

「完成しました!ルーターにリソースを登録してください。」と表示されますので、app/routes.phpに表示されたようにリソースを登録してください。

Done!
All done! Don't forget to add 'Route::resource('posts','PostsController'): 'to app/routes.php

それでは、完成したリソースを見てみましょう。

生成されたモデル

app/models/Post.php

<?php
class Post extends \Eloquent {
 protected $fillable = [];
}

生成されたビュー

app/views/posts/create.blade.php

C:\xampp\htdocs\laravel\app/views/posts/create.blade.php
  • 同様に、edit.blade.php、index.blade.php、show.blade.phpファイルが生成されています。中身はいずれもファイルまでのパス(絶対パス)が記述されています。

生成されたコントローラー

app/controllers/PostsController.php

<?php
class PostsController extends \BaseController {
 public function index()
 {
 //
 }
 public function create()
 {
 //
 }
 public function store()
 {
 //
 }
 public function show($id)
 {
 //
 }
 public function edit($id)
 {
 //
 }
 public function update($id)
 {
 //
 }
 public function destroy($id)
 {
 //
 }
}

生成されたマイグレーション

app/database/migrations/日付_create_posts_table

<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
class CreatePostsTable extends Migration {
 public function up()
 {
 Schema::create('posts', function(Blueprint $table) {
 $table->increments('id');
 $table->string('title');
 $table->text('body');
 $table->timestamps();
 });
 }
 public function down()
 {
 Schema::drop('posts');
 }
}

生成されたシーダー

app/datebase/seeds/PostsTableSeeder.php

<?php
use Faker\Factory as Faker;
class PostsTableSeeder extends Seeder {
public function run()
 {
 $faker = Faker::create();
foreach(range(1, 10) as $index)
 {
 Post::create([
]);
 }
 }
}

生成されたデータベーステーブル

そして、データベーステーブルも生成されています。phpMyAdminを確認してみます。

laravel054

スキャフォールドの生成

それでは、今生成したフォルダとデータベースを全て削除して、今度はスキャフォールドを生成してみたいと思います。

コマンドプロンプトから下記を実行します。

php artisan g:sc post --fields="title:string, body:text"

リソースの場合と同様にモデルの生成を尋ねてきますので、yを入力します。

今度もリソースの場合と同じようにビューの生成を尋ねてきますので、yを入力します。

以下、同様にコントローラー、マイグレーション、シーダー、データベースとリソースの場合と全く同じです。全てyを入力すると、完成です。

それでは、完成したファイルとデータベースを調べてみましょう。

生成されたモデル

app/models/Post.php

<?php
class Post extends \Eloquent {
// Add your validation rules here
 public static $rules = [
 // 'title' => 'required'
 ];
// Don't forget to fill this array
 protected $fillable = [];
}
  • モデルにバリデーションルールが追加されています。コメントアウトすれば、そのまま使用できる(titleが必須項目)ようになっています。

生成されたビュー

ビューファイルに関しては、リソースと全く同じです。

生成されたコントローラー

app/controllers/PostsController.php

<?php
class PostsController extends \BaseController {
 public function index()
 {
 $posts = Post::all();
return View::make('posts.index', compact('posts'));
 }
 public function create()
 {
 return View::make('posts.create');
 }
 public function store()
 {
 $validator = Validator::make($data = Input::all(), Post::$rules);
if ($validator->fails())
 {
 return Redirect::back()->withErrors($validator)->withInput();
 }
Post::create($data);
return Redirect::route('posts.index');
 }
 public function show($id)
 {
 $post = Post::findOrFail($id);
return View::make('posts.show', compact('post'));
 }
 public function edit($id)
 {
 $post = Post::find($id);
return View::make('posts.edit', compact('post'));
 }
 public function update($id)
 {
 $post = Post::findOrFail($id);
$validator = Validator::make($data = Input::all(), Post::$rules);
if ($validator->fails())
 {
 return Redirect::back()->withErrors($validator)->withInput();
 }
$post->update($data);
return Redirect::route('posts.index');
 }
 public function destroy($id)
 {
 Post::destroy($id);
return Redirect::route('posts.index');
 }
}
  • それぞれのアクションメソッドの標準的なロジックが既に記述されています。
  • 3-7行目:Indexメソッドには、一覧表示用のメソッドが用意されています。Postモデルから、全てのデータを取得して、post.indexビューにそのデータを引き渡して、ビューを生成するロジックが記述されています。
  • 8-11行目:createメソッドは、app/views/posts/createビューを生成するロジックが記述されています。
  • 12-21行目:storeメソッドは、データの新規作成のためのロジックが記述されています。
  • 14-18行目:モデルに登録されたバリデーションルールに基づいて、バリデーション処理を行います。
  • 22-26行目:showメソッドは、詳細データの表示用のロジックが記述されています。
  • 32-42行目:updateメソッドは、データを更新するためのロジックが記述されています。
  • 43-47行目:destroyメソッドは、データを削除するためのロジックが記述されています。

生成されたマイグレーション

マイグレーションは、リソースと全く同じです。

生成されたシーダー

シーダーもマイグレーションと全く同じです。

生成されたデータベース

そして、生成されたデータベーステーブルもリソースと同じです。

 

このようにかなり、便利な、リソースとスキャフォールドですが、さらに便利な機能が、リソースと、スキャフォールドのテンプレート機能です。

次回は、このテンプレート機能について調べてみたいと思います。

« »

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です