C'è un modo per forzare YII2 per ricaricare le risorse del modulo su ogni richiesta?
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.
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;
}
}
.