モデルとしての利用例
Permissions
クラスを使い、テーブルクラスをMVCのモデルとして利用する例を取り上げます。ここでは単純にmember_id=1、room_id=1のレコードを対象として、term列を入力された値に書き換える結果を見ることにします。
フロントコントローラindex.phpはmvc_sampleフォルダに置くことにしました。
<?php require_once 'Zend/Controller/Front.php'; Zend_Controller_Front::run('../controllers');
同じフォルダに.htaccessファイルを配置します。Windows環境でファイル名の頭文字に「.」が使えずファイル名を変更する場合は、Apacheのhttpd.confの設定もあわせる必要があります。内容は次のようにします。
RewriteEngine on RewriteBase /table_sample/mvc_sample RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php
2行目でドキュメントルートからのmvc_sampleフォルダのパスを指定します。この例ではmvc_sampleフォルダをtable_sampleフォルダの下に配置しています。
次にアクションコントローラIndexController.phpをcontrollersフォルダへ配置します。このファイルでは、入力画面を表示するindexと更新を行い、結果を表示するupdate
の2つのアクションのメソッドを定義しています。
<?php require_once 'Zend/Controller/Action.php'; require_once '../table_sample_init.php'; class IndexController extends Zend_Controller_Action { public function indexAction() { } public function updateAction() { $req = $this->getRequest(); $new_term = $req->getPost('new_term'); $permission = new Permissions(); try { // 入力された値で更新を行います $permission->update(array('term' => $new_term), 'member_id = 1 and room_id = 1'); // 新しい期限の値をビューで使えるようにします $row = $permission->find(1, 1)->current(); $this->view->assign('new_term', $row->term); } catch (Exception $e) { // 例外が発生した場合、error.phtmlを表示します $this->render('error'); } } }
Permissionsテーブルに入れるデータのチェックは、Permissions
クラスのupdate
メソッドが行っています。そのため、updateAction
メソッドに入力データのチェックを行うコードを書く必要がなく、すっきりしたものになります。
なお、このコードでは例外をすべて一括して扱っています。そのためPermissions
クラスの_check_term
メソッドが例外をスローするほかに、日付として扱えない文字列を指定したためupdate
メソッドが例外をスローしても同じ失敗扱いになります。
最後にビューをviews/scripts/indexフォルダに配置します。今回は入力画面、更新成功画面、更新失敗画面の3つを用意しました。
<html> <head> <title>入室許可期限の更新</title> </head> <body> <form action="Index/update" method="post"> 期限<?php echo $this->formText('new_term', '2030-3-31')?> <?php echo $this->formSubmit('','更新')?> </form> </body> </html>
<html>
<head>
<title>更新結果</title>
</head>
<body>
期限を
<?php echo $this->new_term;?>
に変更しました。<br />
</body>
</html>
<html> <head> <title>更新失敗</title> </head> <body> 期限の更新に失敗しました。<br /> </body> </html>
それではブラウザからmvc_sampleにアクセスしてみましょう。入力画面が表示されます。Permissions
クラスでチェックを行っている「日付が翌年度末までの期間に入っていること」という制限に合った値を入れるかどうかで結果が変わります。
まとめ
今回はZend_Dbのテーブルクラスを作り、基本的な使い方とメソッドを追加してMVCのモデルクラスとして利用する例を取り上げました。次回からは、Zend FrameworkでMVCのビューを担っている、Zend_Viewについて解説していきます。