きまブログ

2022-12から再開しました。

自動コード生成のための補習 - Scaffold(Controller)編

手書きからコード自動生成へ - Scaffold(Controller)編

さて、自動コード生成の集大成?
scaffold (スキャフォールド:足場)にたどり着きました。


ウェブアプリというか、データベース操作の基本的な機能CRUDを一発で実現するためのコードを自動生成してくれます。


基本的には、modelの時と同じです。
コード生成したあと、データベース操作のために oil refine migrate します。

$ oil generate scaffold testscaffold title:text memo:text
Creating migration: /home/kima/test_app/fuel/app/migrations/003_create_testscaffolds.php
Creating model: /home/kima/test_app/fuel/app/classes/model/testscaffold.php
Creating controller: /home/kima/test_app/fuel/app/classes/controller/testscaffold.php
Creating view: /home/kima/test_app/fuel/app/views/testscaffold/index.php
Creating view: /home/kima/test_app/fuel/app/views/testscaffold/view.php
Creating view: /home/kima/test_app/fuel/app/views/testscaffold/create.php
Creating view: /home/kima/test_app/fuel/app/views/testscaffold/edit.php
Creating view: /home/kima/test_app/fuel/app/views/testscaffold/_form.php

$ oil refine migrate


scaffoldで、生成されたのは、
マイグレーション、モデル、コントローラー:1
ビュー:5


まず、コントローラーから解析していきます。
生成されたメソッドgrepで抽出すると、5つありました。

/controller$ cat testscaffold.php | grep function
     public function action_index() ← レコード一覧表示
     public function action_view($id = null) ← レコードの個別表示
     public function action_create() ← レコード挿入
     public function action_edit($id = null) ← レコード編集
     public function action_delete($id = null) ← レコード削除

内容は、いままでの学習の過程で出てきたものがほとんどなので、
だいたい理解できますが、
新登場のものを中心に、内容を解析していきます。

action_index()

(機能) レコード一覧表示
(新登場なし)

action_view($id = null)

(機能)レコードの個別表示

  1. Response::Redirect(’testscaffold’);

相対URLを指定して、(この場合、/controller/testsaffold.php へ) リダイレクトする。

  1. Session::set_flash('error', 'Could not find testscaffold #'.$id);

セッション変数 error に値を設定する。

action_create()

(機能)レコード挿入

  1. Input::method() == ‘POST’

見た感じそのまま。HTTPのメソッドを取得し比較してます。
Inputクラスを使うと、HTTPの情報を取得することができます。

  1. Model_Testscaffold::validate(‘create’);

(モデルのトコロで説明予定:要は、入力値の検査をしてます。)

action_edit($id = null)

(機能)レコード編集
(新登場なし)

action_delete($id = null)

(機能)レコード削除
deleteメソッド
(モデルのトコロで説明予定:要は、レコードを削除してます。)