Open Source Web Development Tutorials - Dev Shed
PHPフレームワーク「CodeIgniter」:CMSを作る
(2009/01/23公開)
コントローラクラスを作る
先ほどの「movies」というMySQLのテーブルからすべての映画を取り出し、ユーザーがコメントを付けられるようにするためのコントローラを作ることは、いつものとおり、それぞれの作業を行うためのメソッドを作ることに集約される。
下に挙げるこのコンローラ・クラスの構造を見ていただければ、その働きをよく理解することができるだろう。ぜひご覧いただきたい:
class Movies extends Controller{
function Movie(){
// load controller parent
parent::Controller();
// load 'MovieModel' model
$this->load->model('MovieModel');
// load helpers
$this->load->helper('url');
$this->load->helper('form');
}
// display all movies
function index(){
$data['title']='Movies List';
$data['movies']=$this->MovieModel->fetchAllRows('movies');
// load 'movie_view' view
$this->load->view('movie_view',$data);
}
// display all comments
function comments(){
$data['title']='Comment List';
$data['comments']=$this->MovieModel->fetchRow($this->uri->segment(3),'movie_id','movie_comments');
// load 'moviecomment_view' view
$this->load->view('moviecomment_view',$data);
}
// insert comment
function insert_comment(){
$this->MovieModel->insertRow('movie_comments',$_POST);
redirect('movie/comments/'.$_POST['movie_id']);
}
}
一見、この「Movies」コントローラの構造は複雑そうに見えるが、実は理解するのはそれほど難しくはない。まず、コンストラクタが、コンテンツ管理システム内のソースのクラスと関数をすべて読み込んでいる。これには、対応するモデルと「url」や「form」など、これまでの記事に出てきたヘルパー関数なども含まれている。
ここで「index()」メソッドをご覧いただきたい。先に触れたように、これは実行されたときにCodeIgniterによって自動的に呼び出され、先ほど定義した「movies」というMySQLテーブルに含まれるすべての映画の情報を画面に表示するように設定されている。
ご覧のとおり、このメソッドはまずモデルを使って前述のテーブルからすべての映画を取り出し、さらに画面表示のために「movie_view.php」というビューファイルにそのデータを埋め込む作業を行う。現時点ではこのビューファイルの構造は気にしないでおこう。次の部分で詳しく検討する。
これまでで「index()」で実行されているロジックを把握していただいたことと思う。次に、「comments()」というものに注目してみよう。名前のとおり、このメソッドは特定の映画に属するすべてのコメントを読み込むために利用される。この作業は、条件付きWHEREというSQL命令文によって実行されるが、モデルのAPIに隠れていて見えることはない。
加えて、このメソッドはURL内から渡されるパラメータを用い、特定の映画に付されたコメントを読み込んでいることにお気づきだろう。その値は次の表現によって返される。
$this->uri->segment(3)
実際には、CodeIgniterは各コントローラに対して自動的に「uri」というクラスを読み込む。今回の場合、その「segment()」というメソッドを用いて、コメントが付けられた映画のIDを読み込んでいる。
そして最後に、「insert_comment()」というメソッドは、再びモデルのAPIを使い、今回は先ほど作った「comments」というMySQLテーブルに新たなエントリを追加している。もちろん、それぞれのコメントに対応するテキストと筆者の名前はHTML送信フォームによって収集されたものだ。次のような構造になる:
$this->MovieModel->insertRow('movie_comments',$_POST);
redirect('movie/comments/'.$_POST['movie_id']);
まず対応する「comments」のMySQLテーブルにコメントを追加し、ユーザーをコメントのwebページにリダイレクトする。
ではここで、忘れないようにこのコントローラクラスをCodeIgniterの/system/application/controllers/フォルダに「movies.php」に保存して、将来の利用に備えておこう。
ここまではよろしいだろうか。すでに上の「Movies」というコントローラクラスの作動についてはよくご理解いただけたと思う。もしかすると、映画やコメントがブラウザに表示される仕組みやユーザーが新しいコメントを送信する方法について疑問を持っておられるかもしれない。
その件については、ご心配には及ばない。次の部分で、それらの作業に必要なすべてのビューファイルの構造をお見せしよう。
どのような動きをするかお見せするため、次ページへのリンクをクリックして読み進めていただきたい。
Copyright © 2008 Ziff Davis Enterprise, Inc.
Originally appearing in the U.S. Edition of Dev Shed. All Rights Reserved.








