ヘルパー関数をアクション内で使う

明けましておめでとうございます。 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するしかないみたいですね。

4 Responses to “ヘルパー関数をアクション内で使う”

1
ac - 09/01/07

app/config/settings.ymlの

.settings: standard_helpers: [Partial, Cache, Form]

に設定でも楽ですかね?動的にロードではないですが...

2
arasho - 10/01/07

settings.ymlに設定していても有効になるのはviewクラスに処理が渡ってからになるので、アクション内で使用するにはsfLoader::loadHelpersを使用しなければいけません。 簡単に言うとsetting.ymlで設定したものはテンプレートファイルでしか有効にならないということです。

3
isyairazu - 12/09/07

有益な情報いつもありがとうございます。

私の失敗情報 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)

4
isyairazu - 12/09/07

これで使えるようになりました。

sfLoader::loadHelpers(array('Helper', 'Tag', 'Form')); echo input_tag('example');

Leave a Reply

You must be logged in to post a comment.