可能很愚蠢,但只想问一下我在发布资产文件时使用的语法是否正确。该指南指示使用文件夹名称时,不要在其后加上星号,但是对我而言,它不是那样工作的。
奇怪的是,即使我指定仅发布css和images文件夹,assetManager也将发布其他文件夹$sourcePath
(幸运的是其中没有文件)。此外,将新文件添加到images文件夹后,它们将保持未发布状态,直到我删除该@web/assets
文件夹为止。这是可以预期的吗?
<?php
namespace app\views\layouts\main\assets;
use yii\web\AssetBundle;
class ThemeAsset extends AssetBundle
{
public $sourcePath = '@theme';
public $baseUrl = '@web';
public $css = [
'css/site.css',
];
public $publishOptions = [
"only" => [
"css/*",
"images/*",
],
"forceCopy" => false,
];
}
首先要注意的是,您应该同时设置$sourcePath
或$baseUrl
不设置两者(如果同时设置了两者,则前者将在assetManager
调用publish
方法时覆盖最后一个)。
奇怪的是,即使我指定仅发布css和images文件夹,assetManager也会在$ sourcePath中发布其他文件夹(幸运的是里面没有文件)。
如果要避免资产管理器发布此文件夹,则必须在except
参数上提及它们publisOptions
:
'except' => [
"doc/",
"img/",
],
而且,将新文件添加到images文件夹后,它们将保持未发布状态,直到我删除@ web / assets文件夹为止。这是可以预期的吗?
是的!这是自然的行为。你可以设置forceCopy
的属性publishOptions
,以true
开发方式。这将导致在每次刷新时更新资产内容。您可以轻松地使用Yii生产常数:YII_DEBUG
。
public $publishOptions = [
'only' => [
'js/',
'css/',
],
'forceCopy' => YII_DEBUG,
];
因此,总的来说,您有一个这样的资产管理器:
<?php
namespace app\views\layouts\main\assets;
use yii\web\AssetBundle;
class ThemeAsset extends AssetBundle
{
public $sourcePath = '@theme';
public $css = [
'css/site.css',
];
public $publishOptions = [
"only" => [
"css/*",
"images/*",
],
'except' => [
"doc/",
"img/",
],
"forceCopy" => YII_DEBUG,
];
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句