明けましておめでとうございます。 symfony 1.0はクリスマスと噂されていましたが、残念ながら年が明けてしまいました。
さて、テンプレート内では便利に使っているヘルパー関数ですが、アクション内で使いたい場合もあるかと思います。 例えばフォームをDBに入っているデータから動的に使いたい場合などです。 もちろん、対象のヘルパーのファイルをrequire_onceすれば使えるのですが、あまりかっこよくありません。 そこで登場するのがsfLoaderです。 アクション内で
sfLoader::loadHelpers("Form");
などとすれば該当のヘルパーファイルをrequireしてくれます(正確には内部的にinclude関数を使っていますので、該当ファイルがなくてもfatal errorとはなりませんが、未定義のヘルパー関数が呼ばれますので結局はfatal errorになると思います)。 単純にrequireするという意味では直接ファイルを指定しても一緒ですが、コードの可読性という意味ではsfLoader::loadHelpersを使ったほうが良いかと思います。
sfLoaderクラスはバージョン0.6.3では存在しませんので、0.6.3ではrequire_onceするしかないみたいですね。


app/config/settings.ymlの
.settings: standard_helpers: [Partial, Cache, Form]
に設定でも楽ですかね?動的にロードではないですが...
settings.ymlに設定していても有効になるのはviewクラスに処理が渡ってからになるので、アクション内で使用するにはsfLoader::loadHelpersを使用しなければいけません。 簡単に言うとsetting.ymlで設定したものはテンプレートファイルでしか有効にならないということです。
有益な情報いつもありがとうございます。
私の失敗情報 sfLoader::loadHelpers('Form'); echo checkbox_tag('test[]', '3', TRUE, array('id'=>3) ); => Fatal error: Call to undefined function _parse_attributes() in ...\symfony\helper\FormHelper.php on line 900
(TT)
これで使えるようになりました。
sfLoader::loadHelpers(array('Helper', 'Tag', 'Form')); echo input_tag('example');