第12回 Smartyとフレームワーク(その2:Zend Framework編) - Smarty講座

yossy先生のSmarty講座

Lecutures on PHP

第12回 Smartyとフレームワーク(その2:Zend Framework編) (その2)

 このエントリーをはてなブックマークに追加

yossy先生

続いて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(); 

yossy先生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日'}です。

テンプレートの書き方はいつも通りですね。

yossy先生ではhttp://(ドメイン名)/test/hello にアクセスしてみましょう。正しく表示されたでしょうか?

いかがでしたか? 前回のCakePHPと比較して前準備がいろいろ大変そうに見えるかもしれませんが、一度設定してしまえば、その後は快適に利用できますので、是非一度チャレンジしてみてくださいね。

フレームワーク開発全盛の昨今のPHP界で今更Smarty? と思われることも多くなってしまいましたが、まだまだ便利に活用できる場面はありますので、前回、今回の記事を参考に再度Smartyを見直してみてください。

  • 1
  • 2
  • yossy先生

本名:吉武 正史

パッケージ系ソフトウェア会社で、自然言語処理系の研究やWebアプリケーション、検索連動型広告などの開発に従事。 2006年末にフリーランスとして独立し、現在はPHPによるWeb開発の業務を中心に、コンサルティングや執筆活動などを展開。
サイトURL:http://freeative.jp/

ご意見・感想フォーム

今回の「yossy先生のSmarty講座」への評価・ご意見があればご記入下さい。

評価:
ご意見・感想:

  



Pick Up Q&A

Q
ログファイルの中の空のデータ行を削除したい
 このエントリーをはてなブックマークに追加 
A
ログのデータ個数(列数)が固定で、空のログが"<><><>"だと既知であれば if ($line === "<><><>") { continue; } で読み飛ばしてもいいのでは? ...

>>続きを読む

まずは配列や文字列の扱いから、じっくり勉強して行きましょう。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)

Q&A掲示板 新着情報