FC2ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[CakePHP] Scaffolding の使い方をまとめた(既存のコントローラーがある場合など)

CakePHP の Scaffolding について、自分用のメモも兼ねて基礎の基礎をまとめた。
<注意>以下の内容は CakePHP1.3 についてです。他のバージョンでは検証してません。

1. Scaffolding とは
CakePHP の Scaffolding という機能を使用することにより、テーブルのデータを表示、編集、削除ができる画面が生成される。
↓Scaffolding により生成された画面Scaffolding により生成された画面
Scaffolding の詳細については、CakePHPマニュアルを参照。
マニュアルには「アプリケーションのスキャフォールディングは、開発者がオブジェクトを生成・取り出し・更新・削除することができる基本的なアプリケーションを定義し作成するという技術です。」と書かれており、テーブルのデータ編集以外にも色々なことができそうだが、マニュアルにはほとんど記述が無い。

2. Scaffolding の使い方
2.1 該当テーブルに対して、既存のコントローラーが無い場合
testsという名前のテーブルについて Scaffolding を使用するには、/app/controllers に tests_controller.php という名前のファイルを作成し、以下のソースコードを記述すればよい。
<?php
class TestsController extends AppController {
  public $scaffold;
}
モデルのファイルを作成する必要は無い。(作成してもよい)
サーバーがlocalhostでルートディレクトリが/app/webrootの場合、http://localhost/tests にアクセスすれば上の画像のような画面が表示される。

2.2 該当テーブルに対して、既存のコントローラーがある場合
testsという名前のテーブルについて Scaffolding を使用したいが、既に tests_controller.php ファイルが作成されている場合は、別名のコントローラーを作成する。
ここでは別名を tests_tbl_controller.php とする。/app/controllers にこの名前のファイルを作成し、以下のソースコードを記述すればよい。
<?php
class TestsTblController extends AppController {
  public $uses = array("Test");
  public $scaffold;
}
コントローラー名とモデル名が異なるので、uses属性にモデル名を記述する。
この場合もモデルのファイルを作成する必要は無い。(作成してもよい)
サーバーがlocalhostでルートディレクトリが/app/webrootの場合、http://localhost/tests_tbl にアクセスすれば以下のような画面が表示される(画像からはヘッダやフッタを省いた)。
Scaffolding により生成された画面 2.2

2.3 該当テーブル名が単数形で、既存の複数形のテーブル名が無い場合
CakePHP の規約では、モデル名の複数形がテーブル名になる。
testという単数形のテーブル名について Scaffolding を使用したい場合は、モデルでテーブル名を指定する。
/app/models に test.php という名前のファイルを作成し、以下のソースコードを記述すればよい。
<?php
class Test extends AppModel {
  public $useTable = "Test";
}
useTable属性にテーブル名を記述する。
Scaffolding により以下のような画面が生成される(画像からはヘッダやフッタを省いた)。
testテーブルの画面のため、上記testsテーブルとはフィールド名が異なっている。
Scaffolding により生成された画面 2.3
画面に Tests と表示されるのは、コントローラーのファイル名が tests_controller.php のため。

2.4 該当テーブル名が単数形で、既存の複数形のテーブル名がある場合
test という名前のテーブルについて Scaffolding を使用したいが、既に testsという名前のテーブルがある場合は、別名のモデルを作成する。
コントローラー名も重ならないように別名にするべき。
コントローラーのファイル名を test_tbl_controller.php とし、モデルのファイル名を test_tbl.php とすると、コントローラーのソースコードは以下のようになる。
<?php
class TestTblController extends AppController {
  public $uses = array("TestTbl");
  public $scaffold;
}
モデルのソースコードは以下のようになる。
class TestTbl extends AppModel {
public $useTable = "Test";
}

Scaffolding により以下のような画面が生成される(画像からはヘッダやフッタを省いた)。
Scaffolding により生成された画面 2.4

紛らわしいテーブル名はバグの元なので、単数形と複数形のテーブル名の混在はできるだけ避けた方がよい。

以上。
自分が一番書きたかったことは「2.2 該当テーブルに対して、既存のコントローラーがある場合」で、それ以外はついでに調べた。
スポンサーサイト

コメント

コメントの投稿

非公開コメント

プロフィール

himax64

Author: 南西
30代後半の無職です。
就活もせずダラダラ生きてます。
作ったもの

最新記事
人気記事
検索フォーム
カテゴリ
月別アーカイブ
最新コメント
最新トラックバック
RSSリンクの表示
QRコード
QRコード
カウンター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。