C'è un modo per forzare YII2 per ricaricare le risorse del modulo su ogni richiesta?

StackOverflow https://stackoverflow.com//questions/25054806

  •  21-12-2019
  •  | 
  •  

Domanda

Il mio sito Web è diviso in moduli separati.Ogni modulo ha i propri file CSS o JS specifici.
L'AssetManager di Yii crea una cartella quando apro prima una pagina che usa le mie risorse.

Sfortunatamente se cambio qualcosa nei miei file Yii 1.x non ricarica i miei file CSS o JS.

Devo eliminare manualmente la cartella Web / Asset.È davvero fastidioso quando stai sviluppando l'app.

funziona quando aggiungo un modulo alla cartella Backend, ma non quando creando un modulo nella cartella del fornitore con il mio spazio dei nomi.

È stato utile?

Soluzione

Con rispetto a yii1.x con assetManager puoi farlo impostando l'attributo 'forcecopy' a true nel file di configurazione

.

... copia i file di attività e le directory anche se già pubblicati prima.Questa proprietà è utilizzata solo durante la fase di sviluppo

Vedi documentazione forcecopy qui per maggiori informazioni.

.

In alternativa è possibile utilizzare linkAssets che non copia i file ma creeranno un collegamento soft tra i file di attività e la tua directory Asset.Non puoi ovviamente usare entrambi.

Per la seconda parte della domanda che suppongo che questo sia in Yii 2.x, dovresti usare Assetbundles, è possibile registrare qualsiasi fascio di namespace da qualsiasi luogo, è sufficiente registrarlo nella vista con alcuni come questo

.
use vendor\myVendorName\myPackageName\assets\AppAsset;
AppAsset::register($this);
.

Altri suggerimenti

In Yii2 puoi aggiungere un timestamp agli URL di beni come questo ...

return [
    // ...
    'components' => [
        'assetManager' => [
            'appendTimestamp' => true,
        ],
    ],
];
.

Ciò non costringerà i beni a ricaricare su ogni richiesta, ma ogni volta che un file di attività viene modificato l'URL cambierà a causa del timestamp e che costringerà la risoluzione di essere ri-pubblicata.

È possibile impostare forceCopy = true.

class Assets extends AssetBundle{

    public function init()
    {
        parent::init();
        $this->publishOptions['forceCopy'] = true;
    }
}
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top