Добавьте номер ревизии к изображениям в Symfony, чтобы избежать кеша браузера - PullRequest
3 голосов
/ 18 марта 2012

Я хотел бы избежать кэширования браузера на моих изображениях, добавляя номер редакции SVN после каждого изображения следующим образом (таким же образом, как этот ответ ):

<?php $v = getRevisionNumber() ?>
<img src="picture.jpg?v=<?= $v ?>" alt="">

Есть ли способ сделать это автоматически в Symfony 1.4 ( как этот для js / css, но с изображениями вместо этого)

Кроме того, как я могу сделать это для изображения, которое находится в файле CSS?

#title {
    background-image: url(/images/title.png);
}

1 Ответ

1 голос
/ 19 марта 2012

Я нашел что-то интересное в трекере Symfony, для версии 1.3 / 1.4 был патч для автоматического добавления метки времени для всех файлов в веб-каталоге: http://trac.symfony -project.org / ticket / 6135

С тех пор он был отменен, понятия не имею почему ... (навязчиво?).

Переопределить помощник по умолчанию для активов

В любом случае, я думаю, что у вас естьсоздать свой собственный AssetHelper (скопировал все содержимое из текущего) и добавить и настроить патч # 6135 в lib/helper/CustomAssetHelper.php.

Но вы не можете выгрузить AssetHelper, потому что он автоматически загружается в ядро: http://trac.symfony -project.org / browser / branch / 1.4 / lib / view / sfPHPView.class.php # L33 Таким образом, возникнет конфликт, поскольку у вас будет дублирующаяся функция (в AssetHelper и CustomAssetHelper).

Добавить пользовательский шаблонизатор

Идея состоит в том, чтобы создать пользовательский sfPHPView для переопределения loadCoreAndStandardHelpers для вызова собственного помощника ресурса (вставьте его в lib/view/sfCustomPHPView.class.php):

class sfCustomPHPView extends sfPHPView
{
  /**
   * Loads core and standard helpers to be use in the template.
   */
  protected function loadCoreAndStandardHelpers()
  {
    static $coreHelpersLoaded = 0;

    if ($coreHelpersLoaded)
    {
      return;
    }

    $coreHelpersLoaded = 1;

    $helpers = array_unique(array_merge(array('Helper', 'Url', 'CustomAsset', 'Tag', 'Escaping'), sfConfig::get('sf_standard_helpers')));

    // remove default Form helper if compat_10 is false
    if (!sfConfig::get('sf_compat_10') && false !== $i = array_search('Form', $helpers))
    {
      unset($helpers[$i]);
    }

    $this->context->getConfiguration()->loadHelpers($helpers);
  }
}

Чтобы изменить sf по умолчаниюPHPView, вам нужно добавить module.yml в config/ или apps/frontend/config/ со следующим содержимым ( вдохновлено sfTwigPlugin ):

all:
  view_class: sfCustom

Переопределить все image_tag()

Как сказал Измир Рамирес , image_tag() вызывает image_path(), что вызывает _compute_public_path($source, 'images', 'png', $absolute);.

В _compute_public_path функции, перед последним условием, вы настраиваете query_string длядобавьте свой собственный номер ревизии (который будет определен где-то еще - например, sfConfig):

$file = sfConfig::get('sf_web_dir').$source;
if ('images' == $dir && sfConfig::get('my_revision_number'))
{
  $query_string .= sfConfig::get('my_revision_number');
}

Это может быть немного сложно, но, используя этот способ, вы можете переопределить функцию image_tag и добавить желаемый номер версиибез переопределения всего, что вы вызываете image_tag ().

Об изображении внутри CSS, это немного сложнее, так как вам придется анализировать CSS или писать CSS в PHP.Понятия не имею о лучшем способе сделать.

...