FuelPHPでSmartyを使う際にplugins_dirが効かない問題

最終更新日時:2017-03-01 16:47:03
FuelPHP Smarty

FuelPHP で Smarty を使い、独自修飾子を作成したい時の問題です。

問題の現象


環境は FuelPHPでSmartyを使う を参照。
上記の環境では、fuel/vendor/smarty/smarty/libs/ がプラグインディレクトリになります。
当然、上記のディレクトリにプラグインファイルを作成すれば正常に稼働するのですが、fuel/vendor/ 以下には、基本的には手を入れたくないですよね?
出来れば、カスタム的なファイルは fuel/app 以下に設置したいです。
そのため、fuel/app/config/parser.php の View_Smarty - environment にある plugins_dir を設定し、プラグインディレクトリを fuel/app 以下に設定します。

 'plugins_dir'       => array(APPPATH.'vendor'.DS.'smarty'.DS.'libs'.DS.'plugins'),


これで、fuel/app/vendor/smarty/libs/plugins/ がプラグインディレクトリとして読み込まれるはずなのですが、実際には読み込まれません。


対応方法


いろいろ調べた結果、以下のような情報を見つけました。

http://bluebones.net/2012/07/fuelphp-updates/

上記を見ると、1.3 リリースには対策が入った?というように読み取れるのですが、1.7, 1.8 を使っている限りでは、やはり plugins_dir は有効になっていないように思います。
結局、上記の workaround を微妙に変えて、以下のように Controller で明示的に plugins_dir を指定することで対応しています。

 Config::load('parser');
 $s = Config::get('View_Smarty');
 View_Smarty::parser()->addPluginsDir($s['environment']['plugins_dir']);


一応上記で期待通りに動いているのですが、イマイチ釈然としないので情報をお持ちの方は是非教えてください(/_\*)

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