データベースを使う その5 スキャフォールド生成
スキャフォールドは足場という意味で、これを生成することでORMの機能に加えてテーブル管理のコントローラとビューまでコマンドひとつで出来てしまうという、恐ろしく便利なものです。
さっそく試してみましょう。
ここではnameフィールドとageフィールドを持つuserテーブルを作成することとします。
$ oil g scaffold user name:varchar[32] age:int
fuel/app/classes/model/user/phpから見ていきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
<?php use Orm\Model; class Model_User extends Model { protected static $_properties = array( 'id', 'name', 'age', 'created_at', 'updated_at', ); protected static $_observers = array( 'Orm\Observer_CreatedAt' => array( 'events' => array('before_insert'), 'mysql_timestamp' => false, ), 'Orm\Observer_UpdatedAt' => array( 'events' => array('before_save'), 'mysql_timestamp' => false, ), ); public static function validate($factory) { $val = Validation::forge($factory); $val->add_field('name', 'Name', 'required|max_length[32]'); $val->add_field('age', 'Age', 'required|valid_string[numeric]'); return $val; } } |
ORMパッケージのModelを継承しているのはORMモデル生成の場合と同様ですが、validateメソッドが追加されています。このメソッドはコントローラから呼び出され、データのバリデーション条件を返します。
また、マイグレーションファイルもモデル生成時と同じくfuel/app/migrationsディレクトリに生成されています。
次に、fuel/app/classes/controller/user.phpを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
<?php class Controller_User extends Controller_Template { public function action_index() { $data['users'] = Model_User::find('all'); $this->template->title = "Users"; $this->template->content = View::forge('user/index', $data); } public function action_view($id = null) { $data['user'] = Model_User::find($id); is_null($id) and Response::redirect('User'); $this->template->title = "User"; $this->template->content = View::forge('user/view', $data); } public function action_create() { if (Input::method() == 'POST') { $val = Model_User::validate('create'); if ($val->run()) { $user = Model_User::forge(array( 'name' => Input::post('name'), 'age' => Input::post('age'), )); if ($user and $user->save()) { Session::set_flash('success', 'Added user #'.$user->id.'.'); Response::redirect('user'); } else { Session::set_flash('error', 'Could not save user.'); } } else { Session::set_flash('error', $val->error()); } } $this->template->title = "Users"; $this->template->content = View::forge('user/create'); } public function action_edit($id = null) { is_null($id) and Response::redirect('User'); $user = Model_User::find($id); $val = Model_User::validate('edit'); if ($val->run()) { $user->name = Input::post('name'); $user->age = Input::post('age'); if ($user->save()) { Session::set_flash('success', 'Updated user #' . $id); Response::redirect('user'); } else { Session::set_flash('error', 'Could not update user #' . $id); } } else { if (Input::method() == 'POST') { $user->name = $val->validated('name'); $user->age = $val->validated('age'); Session::set_flash('error', $val->error()); } $this->template->set_global('user', $user, false); } $this->template->title = "Users"; $this->template->content = View::forge('user/edit'); } public function action_delete($id = null) { if ($user = Model_User::find($id)) { $user->delete(); Session::set_flash('success', 'Deleted user #'.$id); } else { Session::set_flash('error', 'Could not delete user #'.$id); } Response::redirect('user'); } } |
メソッド | 処理内容 |
action_index | 一覧表示 |
action_view | 個別データ表示 |
action_create | 新規追加 |
action_edit | 変更 |
action_delete | 削除 |
action_createとaction_editでは、入力されたデータがモデルのvalidateから得た規定に合っているかを確認しています。
fuel/app/views/userディレクトリにはビューのコードが生成されています。
template.php | ページのテンプレート |
_form.php | 入力フォーム |
index.php | 一覧表示 |
view.php | 個別表示 |
create.php | 新規追加 |
edit.php | 変更 |
コードが生成されているのを確認したらデータベースに反映させます。
$ oil r migrate
それではページを表示してみましょう。ブラウザでpublic/usersを開きます。
データ一覧ページが表示されます。
まだデータはありません。
Addボタンをクリックすると新規追加ページが表示されます。
データを入力したらSaveボタンをクリックします。
データ一覧ページに戻ります。
入力したデータが追加されています。
次にViewをクリックしてデータを表示してみます。
選択したデータが表示されます。
Editをクリックしてデータを変更してみます。
変更してSaveボタンをクリックすると、再び一覧ページが表示されます。
変更が反映されているのがわかります。
最後にDeleteをクリックして削除してみます。
一覧が表示され、データは削除されています。
このように、スキャフォールドを使うことで簡単にデータベースアプリケーションの基本機能を構築することができます。