FuelPHPでSmartyを使う

最終更新日時:2017-02-28 15:52:53
FuelPHP Smarty

FuelPHP の view で Smarty を使うことが出来ます。
FuelPHP-1.7, 1.8 で確認しています。

設定手順


composer の設定


まずは、FuelPHP の composer の設定に Smarty を追加します。
以下のように composer.json の require に "smarty/smarty": "3.*" を記載します。

 "require": {
        "php": ">=5.3.3",
        "composer/installers": "~1.0",
        "fuel/core": "1.8.*",
        "fuel/auth": "1.8.*",
        "fuel/email": "1.8.*",
        "fuel/oil": "1.8.*",
        "fuel/orm": "1.8.*",
        "fuel/parser": "1.8.*",
        "fuelphp/upload": "2.0.6",
        "smarty/smarty": "3.*"
 },


追加後、反映させるために update します。

 % php composer.phar update


これで必要なファイルが設置されます。

Parse パッケージの有効化


次に、Parse パッケージを使えるようにします。
config/config.php の always_load の packages のリストに parser を追加します。

 'always_load'  => array(
 
            /**
             * These packages are loaded on Fuel's startup.
             * You can specify them in the following manner:
             *
             * array('auth'); // This will assume the packages are in PKGPATH
             *
             * // Use this format to specify the path to the package explicitly
             * array(
             *     array('auth'     => PKGPATH.'auth/')
             * );
             */
             'packages'  => array(
                                  //'orm',
                                  'parser',
              ),


拡張子の変更


デフォルトでは、Smarty のファイルは .smarty という拡張子に設定されています。
誰のセンスか分かりませんが、非常にイマイチだと思いますので変えたいです(^_^;
やはりスタンダードなのは .tpl でしょうか。

いつくかやり方があるとは思うのですが、簡単なのは fuel/packages/parser/classes/view/smarty.php の $extension を以下のように直接変更してしまうことです。

 public $extension = 'tpl';


既存パッケージを変更してしまうのはイマイチ、、、と感じる人は、独自のパッケージで拡張 view クラスを作成して always_load の packages に追加して、、、みたいなことをやると美しいかもしれません(^_^;

テンポラリ領域設定


Smarty は app/tmp/Smarty 以下に templates_c ディレクトリを作成し、キャッシュファイルを生成します。
従って、app/tmp/ に Web サーバの書き込み権限が必要です。
ま、tmp なので 777 でOKかと。

 # chmod 777 app/tmp


使用方法


通常は View::forge() であった箇所を View_Smarty::forge() とするだけです。
こんな感じですね。

 return Response::forge(View_Smarty::forge('default/index'));


View::forge() と View_Smarty::forge() は両立しますので、必要であれば Smarty を使う/使わないの使い分けも可能です。
views 以下のファイルは Smarty の記述がそのまま使えますので、特に迷うことはないかと思います。


お問い合わせは 掲示板 にて。