symfonyでCSS,JSを絶対パスで読み込ませる

view.ymlでstylesheetsを指定すると相対パスで読み込まれます。普段はこれで問題ないのですが、絶対パスで読み込ませたい場面に遭遇したのでメモしときます。

解決方法

view.ymlに記述するファイル名を絶対パスで記述する。
まんまですね。

パス取得

symfonyは、yamlファイル内にもPHPがかけるので、PHP埋め込みます。
長かったので、クラス化してyamlファイルから呼び出してます。

<?php
// lib/Route.class.php

class Route
{
  static public function getRoute()
  {
    // homepageまでのURLを絶対パスで取得
    $url = sfContext::getInstance()->getController()->genUrl(array('sf_route' => 'homepage'), true);

    // frontend_dev.php があった場合は余計なので削除
    // この処理がいまいち
    $url = preg_replace('/\/frontend_dev\.php/', '', $url);

    return $url;
  }
}
# apps/frontend/config/view.yml

all:
  stylesheets:
    - "<?php echo Route::getRoute().'css/aaa.css' ?>"
    - "<?php echo Route::getRoute().'css/bbb.css' ?>"