2009年1月23日金曜日

[PHP][Symfony]: SymfonyのドキュメントルートのURLを取得する

Symfonyは基本的に専用のバーチャルドメインを立てて,web/index.phpがドキュメントルートにあることを前提としている(例えば,http://example.com/index.php).

しかし,ドキュメントルートには静的なコンテンツを置きたいとか,一つのバーチャルドメイン上で複数のSymfonyアプリケーションを動かしたいという時には,ドキュメントルート直下で無い所にindex.phpが置かれる.例えば,http://example.com/SF_APP/index.phpなどである.

この様にSymfonyのアプリケーションディレクトリがドキュメントルート直下にあることが保証されない場合,他のファイルのURLをどのように取得すればよいかが困る.
例えば,web/contents/hogehoge.dataといったデータを置いている場合,上記の場合で言えば「/SF_APP/」というサイト内絶対パスを取得する方法が必要になる.

これがスタイルシートやJavaScriptなら,stylesheet_path()やjavascript_path()といった関数がテンプレート内で使えるが,これらの関数は勝手に拡張子を補完したり,cssやjsディレクトリの補完を勝手にやってしまうため,その一つ上位のディレクトリであるwebディレクトリにアクセスすることはできない.

で,色々と検索してみたのだが,それっぽい関数は見つからなかったので,結局以下の方法に落ち着いた.
テンプレート内で,
dirname($sf_request->getScriptName());
これで,Symfonyのwebディレクトリに当たるディレクトリのサイト内絶対パスを取得することができる.
具体的には,

<a href="<?=dirname($sf_request->getScriptName())?>/contents/hogehoge.data">
の様な形式になる.

・・・でもこういった処理は何か関数がありそうなんだけどなぁ・・・

0 件のコメント:

コメントを投稿