Javascript / css kuvvet yeniden Symfony'de nasıl yapılır?

2 Cevap php

Bu konuyu okuduktan sonra: http://stackoverflow.com/questions/118884/what-is-an-elegant-way-to-force-browsers-to-reload-cached-css-js-files

Ben otomatik javascript / css dosyası değiştirilmiş olduğunu keşfetti zaman linke rastgele bir sorgu dizesi veya damgası ekleyerek bir yeniden zorlar Symfony'de herhangi bir yerleşik işlev veya kolay bir yolu olup olmadığını bilmek istiyorum. (Normalde, insanlar <script> etiketi oluşturmak için use_javascript işlevini kullanın)

2 Cevap

Orada hiçbir yerleşik mekanizma, ama biraz yaratıcılık size her eylem layout.php için view.yml gelen hemen hemen her yerde bu kodu yapmak anlamına gelir.

View.yml yöntem yeterince kolaydır:

apps/frontend/config/view.yml:

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

Ben bu biraz çok etkin olduğunu düşünüyorum, ve ben SVN revizyon veya bir genel proje sürüm numarasını ya da kullanmak eğiliminde olsa da:

  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 ayarlanır burada apps/frontend/config/app.yml. Layout.php ve actionSuccess.php için yöntemler burada yeterince kolay olmalı:

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

instead of setting a version for each stylesheet you include, it is better to have it done automatically for all included stylesheets, no matter if you use view.yml or use_stylesheet() method. You need to implement this helper method and include the helper in your applications settings.yml, so that it becomes available to alle your actions.

`

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;
}

`

in your layout.php call this inside your header area. make sure there is no further call to include_stylesheets(), as this is an extended version to it. same can be done with include_javascripts.