10.1.7 Postsコントローラの作成

次に、投稿記事(posts)に対するコントローラを作成します。コントローラとは、投稿記事とやりとりするための仕事ロジックが入るところです。簡単に言うと、それは幾つかのモデルとやりとりし、投稿記事に関連する作業を行う場所です。この新しいコントローラは、posts_controller.phpという名前で、/app/controllersディレクトリの中に配置します。基本的なコントローラは次のようになります。

<?php
class PostsController extends AppController {

	var $name = 'Posts';
}
?>
  1. <?php
  2. class PostsController extends AppController {
  3. var $name = 'Posts';
  4. }
  5. ?>

では、コントローラにひとつのアクションを追加してみましょう。アクションは、アプリケーションの中のひとつの関数か、インターフェイスをあらわしています。例えば、ユーザがwww.example.com/posts/index(www.example.com/posts/と同じです。)をリクエストした場合、投稿記事の一覧が表示されると期待するでしょう。このアクションのコードは次のようになります。

<?php
class PostsController extends AppController {

	var $name = 'Posts';

	function index() {
		$this->set('posts', $this->Post->find('all'));
	}
}
?>
  1. <?php
  2. class PostsController extends AppController {
  3. var $name = 'Posts';
  4. function index() {
  5. $this->set('posts', $this->Post->find('all'));
  6. }
  7. }
  8. ?>

このアクションについて少し説明しましょう。PostsControllerの中にindex()という関数を定義することによって、ユーザは、www.example.com/posts/indexというリクエストで、そのロジックにアクセスできるようになります。同様に、foobar()という関数を定義すると、ユーザは、www.example.com/posts/foobarでアクセスできるようになります。

あるURLにさせたいために、コントローラ名とアクション名をそれに合わせて独自に命名したくなるかもしれませんが、その誘惑に抵抗してください。CakePHPの規約(コントローラは複数形、など)に従って、読みやすく、理解しやすいアクション名を付けるようにしましょう。あとで、"routes"という機能を使って、URLとコードを結びつけることができます。

アクションの中にあるひとつの指令が、 set()を使って、コントローラからビュー(次に作成します。)にデータを渡しています。この行は、Postモデルのfind('all')メソッドから返ってきた値で、'posts'というビューの変数を設定します。Postモデルは自動的に$this->Postとして呼び出せるようになります。これは、Cakeの命名規約に従っているからです。

Cakeのコントローラに関する詳細は、"CakePHPによる開発"の章の、セクション"コントローラ"をチェックしてください。