Как происходит принудительная перезагрузка javascript / css в Symfony? - PullRequest
3 голосов
/ 25 февраля 2010

После прочтения этой темы: Как заставить браузер перезагружать кэшированные файлы CSS / JS?

Я хотел бы знать, есть ли в Symfony какая-либо встроенная функция или простой способ, который автоматически вызывает перезагрузку, добавляя к ссылке случайную строку запроса или метку времени, когда обнаруживает, что файл javascript / css был изменен. (Обычно люди используют функцию use_javascript для создания тега <script>)

Ответы [ 2 ]

3 голосов
/ 25 февраля 2010

Нет встроенного механизма, но немного творчества означает, что вы можете сделать это практически в любом месте кода, от view.yml до layout.php для каждого отдельного действия.

Метод view.yml достаточно прост:

приложение / интерфейс / конфигурация / view.yml:

  stylesheets:    [main?v=<?php echo time() ?>, reset?v=<?php echo time() ?>, layout?v=<?php echo time() ?>]

Хотя я думаю, что это немного слишком активно, и я склонен использовать либо SVN-ревизию, либо общий номер версии проекта:

  stylesheets:    [main?v=<?php echo sfConfig('app_project_version') ?>, reset?v=<?php echo sfConfig('app_project_version') ?>, layout?v=<?php echo sfConfig('app_project_version') ?>]

, где app_project_version установлено в apps / frontend / config / app.yml . Методы для layout.php и actionSuccess.php должны быть достаточно просты здесь:

<?php use_stylesheet('blah?v='.sfConfig::get('app_project_version')); ?>
2 голосов
/ 26 апреля 2012

вместо установки версии для каждой включаемой таблицы стилей лучше сделать это автоматически для всех включенных таблиц стилей, независимо от того, используете ли вы метод view.yml или use_stylesheet (). Вам нужно реализовать этот вспомогательный метод и включите помощника в ваши приложения settings.yml, чтобы он стал доступен для всех ваших действий.

`

function include_versioned_stylesheets()
{
    $response = sfContext::getInstance()->getResponse();
    sfConfig::set('symfony.asset.stylesheets_included', true);
    $html = '';
    foreach ($response->getStylesheets() as $file => $options) {
        $filepath = sfConfig::get('sf_web_dir') . '/' .  stylesheet_path($file);
        if(file_exists($filepath)) {
            $file .= '?v=' . filectime($filepath);
        }
        $html .= stylesheet_tag($file, $options);
    }
    echo $html;
}

`

в вашем layout.php вызовите это внутри области заголовка. убедитесь, что больше нет вызова include_stylesheets (), так как это расширенная версия для него. то же самое можно сделать с помощью include_javascripts.

...