2014/02/20

[PHP]Smarty3.1にバージョンアップして困ったこと その3

ウチではPHPのテンプレートライブラリ(テンプレートエンジン)であるSmartyを使ってるんですが、昨年最新版の3.1系にバージョンアップしたら色々困ったことが起きたのでその記録の続きです。



プラグインディレクトリを追加しようとして怒られる。


参照させるプラグインディレクトリを追加するために
$Smarty->plugins_dir[] = './plugins';
とかやってたら
Notice: Indirect modification of overloaded property Smarty::$plugins_dir has no effect
って怒られる。
つまり$plugins_dirプロパティはマジックメソッド__get() によって返される値になったということ。
その変数への参照がないので変更ができません。

探してみると同じようなことでやられたひとがごろごろ出てくる。
(例えば)
http://blog.still-laughin.com/archives/2011/11/smarty_31.html

Smarty3.1から2系以前の記法で動かなくなったって話で、
setPluginsDir()とかaddPluginsDir()を使いなさいってことでした。


3.1以降での書き方はこう
$smarty->addPluginsDir(
    array(
        'dir1/plugins/',
        'dir2/plugins/',
    )
);
または
$smarty->setPluginsDir(
    array(
        $smarty->plugins_dir[0],
        'dir/plugins/',
    )
);

addPluginsDir()の場合は追加したものが後ろにつくので、意図的に走査する順番を変えたいなら
setPluginsDir()でセットしなおした方がよいでしょう。

マニュアルを見るとわかるのですが、この記法はPluginディレクトリ以外も同様です。
以下ディレクトリ関係のメソッドです。
get
getCacheDir()
getCompileDir()
getConfigDir()
getPluginsDir()
getTemplateDir()
set
setCacheDir()
setCompileDir()
setConfigDir()
setPluginsDir()
setTemplateDir()
add
addConfigDir()
addPluginsDir()
addTemplateDir()
(add~は複数指定可能なディレクトリのみのメソッドです。)


まだ続く予定です。

0 件のコメント:

コメントを投稿