第3回 ブログツールで学ぶ実践的Zend Frameworkの使い方:「Zend Framework」で加速するPHP開発(5/5 ページ)
今回は、Zend Frameworkで構築されたブログツールを題材にして、実際にZend Frameworkに備わる機能や使い方を解説します。題材とするブログツールは、Alexatnet.comで提供されている「Alex@Net Blog」です。
モデル
コントローラやビュースクリプトはHTMLのページごとに1つずつ用意されるのが一般的です。しかし、モデルの場合は規約も少なく、「こう記述すべきだ」という点は少ないです。Alex@Net Blogでは、データベースへ接続し、照会や更新を行う処理はDatabase.phpに記述され、最終的にビュースクリプトへassignされる$model配列を生成する処理が、BlogModel.php内に記述されています。
- データベースへの接続/照会/更新を行うDatabase
Database.phpには、Zend_Db_Tableを継承するクラスとしてDbObjectが定義され、データベースにはこれに対応するobject表が定義されています(リスト13)。ブログデータのほとんどはこの表の1レコードとなり、ドメインがusersのデータはusers表、blogsのデータはblogs表といったように区別されます。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
各ドメインのクラスは、DbObjectクラスを継承して定義されます。ベースとしてZend_Db_Tableの機能を使用し、共通に使用される拡張メソッドがDbObjectクラス内でオーバーライドされています。各ドメインのデータがinsertされる際、objectと各ドメインのidの値が同じになるように、まずobject表へinsertしてid列の値を自動生成します。その後、Zend_Db_AdapterのlastInsertIdメソッドでid列の値を取得して、それを各ドメイン表のid列値としてinsertしています。
class DbUsers extends DbObject {
protected $_name = 'users';
function _getName($params) {
return $params['login'];
}
}
このように更新処理は主にZend_Db_Tableの機能を利用して行っていますが、照会処理の方はBlogDataクラス内でZend_Db_Adapterを直接利用しています(リスト14)。まず、引数で渡された変数が想定されたデータ型であるかを、assertでチェックしています。その後、Zend_Db_Selectオブジェクトを生成します(引数の有無によって実行するSELECT文を変更するように作成しています)。最後にfetchAllで全行フェッチした後、変数を整えて返しています。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
- ブログデータの配列を生成するBlogModel
リスト14のfindPostsメソッドを呼び出しているのは、BlogModel.phpに定義されたGetPostsメソッドです(リスト15)。このメソッドはBlog Controller内で呼ばれ、最終的に返している$blog変数はビュースクリプトへassignされる$model配列です。Database.phpと同様に、ここでもassertによってデータ型のチェックを行っています。
BlogDataクラスのfindBlogWithNameメソッドによって、対象のブログが存在するか確認した後、findPostsメソッドでタグ*とエントリの表示範囲(現在のページ$pageに対して7件表示する)を引き渡します。返ってきた配列を$blog['posts']に代入して、ブログのエントリ(=post)ごとに変数の値を整えます。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
まとめ
今回は、ブログツールを例に、Zend Framework独特の書き方を紹介しました。ここでは特に、どんなアプリケーションでも使用するような機能を取り上げたつもりです。
必ずしもこれがベストというわけではありませんが、やはりフレームワークの使い方を覚えるには、使用例を見ていくことが近道といえるでしょう。本稿で取り上げたアプリケーションが単純すぎると思われた方は、例えば「データベースアクセスを減らすためにZend_Cacheを利用して$modelをキャッシュする」といったように、Zend Frameworkのほかの機能をつけ足したりして自分なりに書き換えてみてください。特にモデル層は、より効率良く書き換える余地がありそうです。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
このページで出てきた専門用語
タグ
findPostsメソッド内のSELECT文で、tags表に該当するタグが存在しないか条件節を追加する「self::$db->quoteInto('t.name IN (?)', $tags)」の部分に適用される。
本記事は、オープンソースマガジン2006年11月号「Zend Framework」で加速するPHP開発を再構成したものです。
著者紹介
日本アイ・ビー・エム システムズエンジニアリング株式会社
杉田直哉
日本アイ・ビー・エム システムズ・エンジニアリング株式会社(ISE)は、日本アイ・ビー・エムグループにおけるSE技術者の専門家集団として1992年7月に設立された。
発足以来、IBM製品を中心とした難易度の高い複雑なシステム構築や先進技術の適用場面において、卓越したITスキルによりお客様と開発現場を支援してきた。
近年は、仮想化技術・グリッドコンピューティング・Web 2.0・オープンソースソフトウェア等々の先進技術分野での支援も展開している。
関連記事
- developersLife〜開発者という生き方
- 連載第1回 PHP開発でZend Frameworkを知らないだなんて嘘ですよね?
Zend Frameworkは、MVCアーキテクチャを構成し、各種コンポーネントを組み合わせることで効率的なPHPアプリケーションを構築できるフレームワークで、PHP用フレームワークの本命と呼ばれている。本稿では、Zend Frameworkについて、その機能と各種コンポーネントの使い方を解説する。 - 第2回 Zend Frameworkの各コンポーネントを一気に制する
前回は、Zend Frameworkの概要とその導入方法について説明しました。今回は、各コンポーネントの使用方法について紹介していきます。 - PHPアプリ開発ツールベンダーに再編の動き
3社のソフトウェア開発ツール企業が経営トップの入れ替えを発表した。Zend Technologies、Catalyst Systems、Mindreefの各社は相次いで、新CEOを指名した。 - Zend、IBM System i向けのPHP製品を提供開始
関連リンク
- developerWorks
- Zend Frameworkを理解する パート1:基本
Zend Framework についてまだ聞いたことがなくてもいですって?心配には及びません。この記事では、Zend Framework を概観し、その一般概念を説明し、この「Zend Framework を理解する」シリーズで学ぶ準備をします。 - Zend Core for IBM - PHP開発者のためのガイド・ツアー
Copyright © ITmedia, Inc. All Rights Reserved.