Existe uma maneira de forçar Yii2 para recarregar módulo de activos em cada pedido?

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

  •  21-12-2019
  •  | 
  •  

Pergunta

Meu site é dividido em módulos separados.Cada módulo tem seu próprio específicos css ou js.
O Yii é assetManager cria uma pasta quando eu abrir uma página que utiliza os meus bens.

Infelizmente, se eu mudar alguma coisa na minha arquivos Yii 1.x não recarregar meu css ou js.

Eu tenho que excluir manualmente os web/ativos pasta.É muito chato quando você está desenvolvendo o aplicativo.

Isso funciona quando eu adicione um módulo para o back-end pasta, mas não quando eu estou criando um módulo do fornecedor pasta com o meu próprio espaço de nomes.

Foi útil?

Solução

Com relação ao Yii1.x Com assetManager você pode fazer isso definindo o 'forceCopy' atributo como true no arquivo de configuração

...copie os arquivos de ativos e diretórios, mesmo se eles já publicado antes.Esta propriedade é utilizada somente durante a fase de desenvolvimento

Consulte a documentação forceCopy aqui para obter mais informações.

Alternativamente, você pode usar linkAssets que não irá copiar os arquivos, mas criar um soft link entre o seu ativo arquivos e o seu diretório de ativos.Você não pode usar ambos.

Para a segunda parte da pergunta, eu estou supondo isso é no Yii 2.x, você deveria usar AssetBundles, você pode registrar qualquer espaço de nomes bundle a partir de qualquer lugar, basta registrá-lo no modo de exibição com alguns, como este

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

Outras dicas

Em Yii2 você pode acrescentar uma hora a URLs de ativos como este...

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

Isso não vai forçar a activos para recarregar cada pedido, mas sempre que um activo arquivo é alterado, a URL vai mudar por causa de carimbo de data / hora e que vai forçar o ativo a ser re-publicado.

Você pode definir forceCopy = true.

class Assets extends AssetBundle{

    public function init()
    {
        parent::init();
        $this->publishOptions['forceCopy'] = true;
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top