Zend Framework でモデルを使う
Zend Framework ではモデルの使用はオプションになっていますが、O/Rマッパー自体は用意されているので、それを使ってみます。今回は test_db というデータベースに test_table_name(主キーは test_primary_key)というテーブルがある前提にします。アプリケーションの構造は推奨にのっとって以下のようにします。
test/html/index.php test/application/models/Dao/Test.php test/application/views/scripts/index/index.phtml test/application/controllers/IndexController.php
test/html/index.php
models 以下にはパスが通っていないので、パスに追加します。Zend Framework のパスは既に php.ini に定義済みであることを前提にします(未定義なら Zend Framework のパスも追加しておきます)。
<?php function main() { // モデルにパスを通す set_include_path( get_include_path() . PATH_SEPARATOR . '../application/models' ); // オートローダー有効化 require_once 'Zend/Loader.php'; Zend_Loader::registerAutoload(); // データベースハンドルの取得 $db = new Zend_Db_Adapter_Pdo_Pgsql(Array( 'host' => '127.0.0.1', 'username' => 'anonymous', 'password' => 'xxxxxxxx', 'dbname' => 'test_db' )); Zend_Db_Table_Abstract::setDefaultAdapter($db); // アプリケーション実行 Zend_Controller_Front::run('../application/controllers'); } main();
Zend_Db_Table_Abstract::setDefaultAdapter を呼んでおくと、すべてのモデルがデフォルトのデータベースハンドルを使ってくれるようになります。Zend_Db_Adapter_Pdo_Pgsql は PostgreSQL 用のクラスなので、他のデータベースを用いるときはそれに準じたクラスを呼びます。
test/application/models/Dao/Test.php
DAO クラスです。Zend Framework のコーディング規約にのっとって、パスをアンダーバーにしています。モデルは Zend_Db_Table_Abstract を継承します。必須パラメータはテーブル名と主キー名だけです。あとは O/R マッパーがうまいことやってくれます。
<?php class Dao_Test extends Zend_Db_Table_Abstract { protected $_name = 'test_table_name'; protected $_primary = 'test_primary_key'; }
test/application/controllers/IndexController.php
test_table_name から全件取り出す例です。詳しい使い方は Zend Framework のドキュメントを参照してください。
<?php class IndexController extends Zend_Controller_Action { public function indexAction() { $test = new Dao_Test(); $rows = $test->fetchAll(); $this->view->assign('tests', $rows); } }