Zend Framework入門(7):抽象化レイヤによるデータベースアクセス手法 - Zend_Db(後編) -
Zend Frameworkによる実践的なPHPアプリケーション開発 7
ダウンロード サンプルファイル (8.4 KB)
モデルとしての利用例
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について解説していきます。
この記事は参考になりましたか?
既に会員の方はを行ってください。
- この記事の著者
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
WINGSプロジェクト 川北 季(カワキタ ミノル)
<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
