はじめに
本連載では、PHP上で動作するアプリケーションフレームワークであるZend Frameworkについて紹介していきます。今回は引き続きZend_Controllerの最新機能を紹介したいと思います。前回はルーティングの新機能を見てみましたが、今回はアクションコントローラーまわりの変更を紹介したいと思います。
対象読者
PHPの基本構文やについては一通り理解している方を対象としています。また、過去の記事からの差分を中心に扱っているため、必要に応じて過去の記事を参照してください。
必要な環境
Zend FrameworkはPHP 5.2.4以降とWebサーバがインストールされている環境で利用可能です。本稿ではWebサーバとしてApache 2.2を、OSにWindows XPを採用し、アプリケーションを作成していきます。
以下に、今回アプリケーション作成/動作確認に用いた環境を示します(インストールにあたっては最新安定版の使用を推奨します)。各項目の詳細なインストール手順は、「サーバサイド技術の学び舎 - WINGS」より「サーバサイド環境構築設定手順」を参照ください。
- Windows XP SP3
- PHP 5.3.3
- Apache 2.2.16
LinuxやFreeBSDなどUNIX系OSをお使いの方もコマンドはほぼ一緒なので、パスなどは適宜読み替えてください。
アクションヘルパー
アクションヘルパーは以前紹介したとおり、アクションコントローラーの機能を補助します。このアクションヘルパーは以前紹介したときから4つ、種類が増えています。
| 分類 | ヘルパー名 | 説明 |
| 従来からあったもの | FlashMessenger | リクエストをまたがったメッセージの保存 |
| ViewRenderer | Zend_Viewコンポーネントとの連携 | |
| Redirector | リダイレクト関係 | |
| 追加されたもの | AutoComplete | 補完機能つきテキスト入力の補助(オートコンプリート) |
| ContextSwitch | 要求フォーマットに対応して出力を変更 | |
| AjaxContext | ContextSwitchのAJAX用版 | |
| Json | JSON形式での出力 |
増えたアクションヘルパーは4種類で、大部分がAJAX機能を補助するためのものです。こちらについて、順番に見ていきましょう。
補完機能つきテキスト入力の補助(AutoComplete)
多くのJavaScriptツールキットでは、ユーザが入力しているテキストを補完する機能(オートコンプリート)を持つテキスト入力を提供しています。例えばDojoツールキットならComboBoxウィジェットにそのような機能があります。
AutoCompleteアクションヘルパーは、このようなオートコンプリート機能のあるウィジェットに対して、補完の候補を送る機能を提供します。現在、AutoCompleteアクションヘルパーが対応しているのはDojoツールキットとScriptaculousツールキットです。
ここで、DojoのComboBoxウィジェットを対象として、AutoCompleteアクションヘルパーを利用する方法について説明します。なお、そのためにZend_Dojoコンポーネントも利用します。Zend_Dojoの詳細については以前の記事も参照してください。
それでは、まずZend_Dojoコンポーネントの設定とComboBoxの作成から見ていきましょう。
public function comboboxAction()
{
$view = $this->view;
/* (1)Zend_Dojoを有効にする */
Zend_Dojo::enableView($view);
Zend_Dojo_View_Helper_Dojo::setUseDeclarative();
$dojo = $view->dojo();
/* (2)Dojoの場所を指定する */
$dojo->setCdnVersion('1.5.0');
$dojo->setCdnBase(Zend_Dojo::CDN_BASE_AOL);
/* (3)Dojo側で利用するファイルの指定 */
$dojo->addStyleSheetModule('dijit.themes.tundra');
$dojo->requireModule('dijit.form.ComboBox');
$dojo->requireModule('dijit.form.Form');
$dojo->requireModule('dojo.data.ItemFileReadStore');
/* (4)ComboBoxを含むフォームの作成 */
$url = $view->url(array('action'=>'autocomplete')); //(4-1)
$form = new Zend_Dojo_Form;
$form->addElement('ComboBox','cbox',
array('label'=>'Combo Box',
'value'=>'beta',
'autocomplete'=>true,
'storeId' => 'cboxStore',
'storeType' => 'dojo.data.ItemFileReadStore',
'storeParams' => array('url' => $url),//(4-2)
)
);
$view->assign('form', $form);
}
(1)では、まずZend_Dojoコンポーネントを利用するための下準備をしています。(2)でDojoツールキットの場所を指定しています。ここではAOLが提供しているCDNにあるものを利用するように設定しています。(3)ではDojo側で、どのようなファイルを利用するかの設定をしています。
そして(4)で実際にComboBoxを作成しています。この中の(4-2)で渡している「storeParams」パラメータで補完の候補を生成するURLを指定しています。このURLは(4-1)で作成しており、「autocomplete」アクションを示すURLになっています。
この、候補を作成する「autocomplete」アクションでautoCompleteアクションヘルパーを使います。
public function autocompleteAction()
{
/* 候補の一覧 */
$data = array('alpha','beta','gamma','delta','epsilon','zeta',
'eta','theta','iota','kappa','lambda','mu',
'nu','xi','omicron','pi','rho','sigma','tau',
'upsilon','phi','chi','psi','omega');
/* 候補をJSON形式で送信 */
$this->_helper->autoCompleteDojo($data);
}
このように、候補を配列に格納しておきます。そして、今回はDojoツールキットを利用するので、autoCompleteDojoアクションヘルパーに渡すだけで、JSON形式で補完の候補が送信されます。
以前の例ではZend_Dojo_Dataクラスのオブジェクトを自分で作成したりと多少手間がかかりましたが、このようにautoCompleteアクションヘルパーを利用すれば簡単にオートコンプリートのあるテキスト入力が作成できます。

