第12回 Smartyとフレームワーク(その2:Zend Framework編) - Smarty講座
yossy先生のSmarty講座
Lecutures on PHP
第12回 Smartyとフレームワーク(その2:Zend Framework編) (その2)

続いてpublicディレクトリに、入り口となるindex.phpを作成します。
publicディレクトリには.htaccessファイルも用意し、mod_rewriteの設定もしておいてくださいね。
(.htaccessについては省略します)
1 <?php
2 error_reporting(E_ALL|E_STRICT);
3 ini_set('display_errors', 1);
4 date_default_timezone_set('Asia/Tokyo');
5
6 define('APP_DIR', dirname(dirname(__FILE__)) . '/application/');
7 define('APP_SMARTY_DIR', APP_DIR . '/smarty/');
8 define('SMARTY_DIR', '/usr/local/lib/smarty/libs/');
9
10 // directory setup and class loading
11 set_include_path('.' . PATH_SEPARATOR . '../library/'
12 . PATH_SEPARATOR . SMARTY_DIR
13 . PATH_SEPARATOR . get_include_path());
14 include "Zend/Loader.php";
15 Zend_Loader::registerAutoload();
16
17 // setup controller
18 $frontController = Zend_Controller_Front::getInstance();
19 $frontController->throwExceptions(true);
20 $frontController->setControllerDirectory(APP_DIR . 'controllers');
21
22 // smarty setup
23 require_once( SMARTY_DIR .'Smarty.class.php' );
24 require_once('Zend_View_Smarty.class.php');
25 $view = new Zend_View_Smarty(
26 APP_SMARTY_DIR . 'templates',
27 array(
28 'compile_dir' => APP_SMARTY_DIR . 'templates_c',
29 'config_dir' => APP_SMARTY_DIR . 'configs',
30 'cache_dir' => APP_SMARTY_DIR . 'cache'
31 )
32 );
33
34 $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper
('ViewRenderer');
35 $viewRenderer->setView($view)
36 ->setViewBasePathSpec($view->getEngine()->template_dir)
37 ->setViewScriptPathSpec(':controller/:action.:suffix')
38 ->setViewScriptPathNoControllerSpec(':action.:suffix')
39 ->setViewSuffix('tpl');
40
41 // run!
42 $frontController->dispatch();
8行目のSMARTY_DIRは適宜Smartyをインストールしたディレクトリに書き換えてください。
ポイントは22行目からのZend_View_Smartyインスタンスの生成です。
まず先ほど作成したSmartyラッパークラスのインスタンスを作成します。
コンストラクタの引数としてテンプレートやキャッシュなどのディレクトリを指定します。
そしてヘルパーブローカを通してViewRenderヘルパーを取得し、ビューオブジェクトとしてSmartyラッパークラスのインスタンスを渡しテンプレートのパスやテンプレートファイルの拡張子設定などを行います。
ちょっと長くなりましたが、ここまでで前準備は完了です。
Zend Frameworkを使ってみよう
では実際にZend Framework上でSmartyテンプレートを使ってみたいと思います。
まずはコントローラクラスを作成します。application/controllersディレクトリの下に、TestController.phpというファイル名で以下のソースを保存してください。
1 <?php
2 class TestController extends Zend_Controller_Action
3 {
4 function helloAction()
5 {
6 $this->view->name = 'yossy';
7 }
8 }
CakePHPの時の例と比べると、コントローラクラスの中身は非常にすっきりしていますね。
TestControllerのhelloAction()というメソッドですが、これは http://(ドメイン名)/test/hello にアクセスしたときに呼び出されるMVCのコントローラの動作を記述します。
$this->view というコントローラのメンバ変数には、先ほど作成したZend_View_Smartyのインスタンスが設定されています。そのnameというメンバ変数にテンプレートへ渡す値を代入します。
このときに、Zend_View_Smartyクラスの__set()メソッドが呼ばれ、内部でSmartyのassign()メソッドが呼ばれ、テンプレートで$name変数が使えるようになります。
次にテンプレートファイルです。application/smarty/templates の下にコントローラに対応したディレクトリを作成します。
上記の例ではTestControllerに対応したtestというディレクトリをapplication/smarty/templates に作成します。
そしてtestディレクトリの下にhelloAction()に対応したhello.tplというファイル名でテンプレートを作成します。
こんにちは、{$name}さん!!
今日は{$smarty.now|date_format:'%Y年%m月%d日'}です。
テンプレートの書き方はいつも通りですね。
ではhttp://(ドメイン名)/test/hello にアクセスしてみましょう。正しく表示されたでしょうか?
いかがでしたか? 前回のCakePHPと比較して前準備がいろいろ大変そうに見えるかもしれませんが、一度設定してしまえば、その後は快適に利用できますので、是非一度チャレンジしてみてくださいね。
フレームワーク開発全盛の昨今のPHP界で今更Smarty? と思われることも多くなってしまいましたが、まだまだ便利に活用できる場面はありますので、前回、今回の記事を参考に再度Smartyを見直してみてください。
- 1
- 2
その他の記事も見る
- 第1回 Smartyの紹介
- 第2回 Smartyを使ってみる(その1:変数編)
- 第3回 Smartyを使ってみる(その2:制御構造編)
- 第4回 Smartyを使ってみる(その3:関数編)
- 第5回 Smartyを使って実用的なページを作ってみる(その1)
- 第6回 Smartyを使って実用的なページを作ってみる(その2)
- 第7回 Smartyの便利な機能を使いこなす(その1:キャッシュ前編)
- 第8回 Smartyの便利な機能を使いこなす(その2:キャッシュ後編)
- 第9回 Smartyの便利な機能を使いこなす(その3:フィルタ編)
- 第10回 Smartyの便利な機能を使いこなす(その4:プラグイン編)
- 第11回 Smartyとフレームワーク(その1:CakePHP編)
- 第12回 Smartyとフレームワーク(その2:Zend Framework編)
- 第13回 次世代のSmarty - Smarty3の紹介
- 第14回 Smartyでケータイサイトを作ってみる
- >>「yossy先生のSmarty講座」一覧ページに戻る
- yossy先生
本名:吉武 正史
パッケージ系ソフトウェア会社で、自然言語処理系の研究やWebアプリケーション、検索連動型広告などの開発に従事。
2006年末にフリーランスとして独立し、現在はPHPによるWeb開発の業務を中心に、コンサルティングや執筆活動などを展開。
サイトURL:http://freeative.jp/





ページのトップへ


GETのままでは検索エンジンのロボットが拾ってくれなかったためにSEO対策として有効だと言われていますね。