2010-02-25 2 views
3

После прочтения этой нити: How to force browser to reload cached CSS/JS files?Как перезагрузка javascript/css в Symfony?

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

ответ

3

Нет встроенного механизма, но небольшое креативность означает, что вы можете сделать это практически в любом месте вашего кода, от 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 установлен в приложений/FRON tend/config/app.yml. Методы layout.php и actionSuccess.php должны быть достаточно легко здесь:

<?php use_stylesheet('blah?v='.sfConfig::get('app_project_version')); ?> 
+0

Но это будет иметь последствия только при использовании include_javascript/include_stylesheet. В моем приложении Symfony view.yml не используется вообще, вместо этого используются функции use_javascript и use_stylesheet. – bobo

+0

Принцип тот же - эти функции являются практически синонимами друг для друга, которые используются только в разных контекстах (YAML и PHP). В вашем случае просто используйте: ' ' Я обновил ответ с помощью этого решения. – Raise

+0

Спасибо за помощь. В конце концов, я принял вашу идею и изменил функции javascript_path и stylesheet_path в AssetHelper.php структуры, чтобы сделать это возможным. Но я должен был помнить об этом при обновлении версии. – bobo

2

вместо установки версии для каждой таблицы стилей вы включаете, то лучше, чтобы он сделал автоматически для всех включенных в таблицы стилей, независимо от того, вы используете метод 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.

+0

лучшее решение, о котором я думаю, но я использовал его с файлом() и только в prod env. благодаря – palmic

 Смежные вопросы

  • Нет связанных вопросов^_^