Ajaxサンプル
最後に、Ajaxをsymfonyで用いた簡単なサンプルを示します。
名前入力テキストエリアで2秒ごとに変更を感知し、もしあれば「入力中の文字列は:」として表示します(Namaekeikaアクション)。確定するとその下に「こんにちは、***さん!」とハイライト効果をつけて表示します(Namaeアクション)。
<?php /**
* ajax_test actions.
*
* @package sym5
* @subpackage ajax_test
* @author Your name here
* @version SVN: $Id: actions.class.php 2692 2006-11-15 21:03:55Z fabien $
*/ class ajax_testActions extends sfActions { /**
* Executes index action
*
*/ public function executeIndex() { // $this->forward('default', 'module'); } public function executeNamae() { return $this->renderText( "こんにちは、".$this->getRequestParameter('item')."さん!"); } public function executeNamaekeika() { return $this->renderText( "入力中の文字列は:".$this->getRequestParameter('item')); } }
非同期通信でページの一部のみを更新するAjaxにおいては、テンプレートはスキップしてダイレクトに結果を渡す方が速度が保たれます。symfonyでは「return」に「$this->renderText(<文字列>)」を指定することで、テンプレートをスキップして値を渡すことが可能になっています。
お名前をどうぞ。<br /> <?php echo use_helper('Javascript') ?> <?php echo form_remote_tag(array( 'update' => 'hyouji', 'url' => 'ajax_test/namae', 'complete' => visual_effect('highlight', 'hyouji'), (XMLHttpRequestが完了したときに、結果をハイライト表示する) )) ?> <?php echo input_tag('item') ?> <?php echo submit_tag('Go') ?> <?php echo observe_field('item', array( 'frequency' => 2, (2秒間隔でチェックする) 'update' => 'keika', 'url' => 'ajax_test/namaekeika', 'with' => "'item=' + value", (入力されている値を送る) )) ?> </form> <br /> <div id="keika"></div> <div id="hyouji"></div>

今回のまとめ
最終回はsymfonyのAjax機能について紹介しました。ここまで6回にわたってsymfonyについてざっと紹介してきましたが、解説しきれなかった部分も多くあります。ただ、ここまでの知識があれば本家のドキュメントを調べて必要な部分を読むのは、それ程難しくはないでしょう。ぜひ実際に、魅力的な機能の多いsymfonyを活用してみてください。
参考文献
- script.aculo.us
- Prototype JavaScript framework
