まずは、以下のような URL で Hello World を表示するようにしてみましょう。
http://localhost/tasks/index
(あるいは)
http://localhost/tasks
最低限必要なファイルは以下の 2 つです。
app/Controller/TasksController.php
(Controller 定義)app/View/Tasks/index.ctp
(View 定義)http://localhost/tasks/*
という URL にアクセスがあると、自動的に TasksController.php
という名前の Controller
クラスが処理を受け付けるようになっています。
まずは、このクラスに index
メソッドを追加します。
<?php
class TasksController extends AppController {
public function index() {
}
}
上記のような TasksController.php
を作成すると、http://localhost/tasks/index
という URL でアクセスできるようになります。
でも、まだ表示内容 (view) の定義がないので、警告画面が表示されるはずです。
view の定義は、cts
という拡張子を持つ HTML テンプレートで行います。
TasksController
がリクエストを処理すると、HTML テンプレートとして、自動的に app/View/Tasks/<Action名>.cts
というファイルが使用されます。
例えば、http://localhost/tasks/index
にアクセスがあると、TasksController
クラスの index
メソッドが呼び出され、テンプレートとして index.ctp
が使用されます。
<p>Hello World</p>
http://localhost/tasks
にアクセスして、以下のような感じで Hello World のページが表示されれば成功です。
Hello World というテキスト以外にもヘッダやフッタが表示されていますが、これらの表示内容は、app/View/Layouts/default.ctp
で定義されています。
Model クラスを作成すると、データベースのレコードに透過的にアクセスできるようになります。
ここでも名前が重要です。
例えば、tasks
テーブルの 1 レコードを表すには、Task
という名前の Model クラスを用意し、以下のパスに保存します。
app/Model/Task.php
(Model 定義)テーブル名は複数形 (tasks) ですが、Model クラスは 1 レコード分のデータを表すので、Task.php
というように単数系で定義します。
<?php
class Task extends AppModel {
}
http://localhost/tasks/index という
URL でアクセスしたときに、tasks
テーブル内のレコードの内容を列挙するために、Controller と View を修正します。
<?php
class TasksController extends AppController {
public function index() {
$tasks = $this->Task->find('all');
$this->set('tasks', $tasks);
}
}
Controller の set
メソッドを使うと、View のテンプレートから参照可能な View 変数を設定することができます。
$this->set(<変数名>, <値>)
としておくと、テンプレート内から $変数名
のようにアクセスできるようになります。
上記の例では、Task->find()
の戻り値である連想配列を、テンプレートから参照できるようにしています。
<h1>Task List</h1>
<table>
<tr>
<th>ID</th>
<th>Title</th>
<th>Body</th>
<th>Created</th>
<th>Modified</th>
</tr>
<?php foreach ($tasks as $t): ?>
<tr>
<td><?php echo $t['Task']['id'] ?></td>
<td><?php echo $t['Task']['title'] ?></td>
<td><?php echo $t['Task']['body'] ?></td>
<td><?php echo $t['Task']['created'] ?></td>
<td><?php echo $t['Task']['modified'] ?></td>
</tr>
<?php endforeach; ?>
</table>
ページをリロードして、以下のように表示されれば成功です。
table のスタイルシートもデフォルトで設定されていて、いい感じですね。