requerimientos proyecto modulos modelos layouts framework estructura escenarios documentacion crear php yii assets yii2

php - proyecto - yii2 escenarios



¿Hay alguna manera de forzar a Yii2 a volver a cargar los activos del módulo en cada solicitud? (3)

En Yii2 puede agregar una marca de tiempo a las URL de activos como este ...

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

Esto no obligará a los activos a recargarse en cada solicitud, pero cada vez que se cambie un archivo de activos, la URL cambiará debido a la marca de tiempo y eso forzará la publicación del activo.

Mi sitio web está dividido en módulos separados. Cada módulo tiene sus propios archivos css o js específicos.
El assetManager de Yii crea una carpeta cuando abro una página que usa mis recursos.

Desafortunadamente, si cambio algo en mis archivos, Yii 1.x no vuelve a cargar mis archivos css o js.

Debo eliminar manualmente la carpeta web / assets. Es realmente molesto cuando estás desarrollando la aplicación.

Esto funciona cuando agrego un módulo a la carpeta backend, pero no cuando estoy creando un módulo en la carpeta del proveedor con mi propio espacio de nombres.


Puede establecer forceCopy = true .

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


Con respecto a Yii1.x Con assetManager puede hacer esto estableciendo el atributo ''forceCopy'' como verdadero en su archivo de configuración

... copie los archivos y directorios de activos, incluso si ya se han publicado antes. Esta propiedad se usa solo durante la etapa de desarrollo

Consulte la documentación de forceCopy aquí para obtener más información.

Alternativamente, puede usar linkAssets que no copiará los archivos, sino que creará un enlace blando entre los archivos de sus activos y el directorio de sus activos. Por supuesto, no puedes usar ambos.

Para la segunda parte de la pregunta, supongo que está en Yii 2.x, se supone que debes usar AssetBundles, puedes registrar cualquier paquete de espacio de nombres desde cualquier lugar, simplemente lo registras en la vista con algo como esto

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