如何在 Yii2 中管理资产?

2022-08-30 19:12:31

例如,我创建了一个新页面,例如,我想使用主干.js,自定义css文件和一些图像集合。我应该在 Yii2 中声明所有这些内容吗?我找到了AppAsset.php模块,但这仅适用于css / js文件,当我的css / js文件和路径在那里声明时,我没有注意到任何变化:

class AppAsset extends AssetBundle {
    public $basePath = '@webroot';
    public $baseUrl = '@web';
    public $css = [
        'css/site.css',
        'js/jquery.mobile-1.4.2.min.css',
    ];
    public $js = [
        'js/jsquery-2.1.0.min.js',
        'js/jquery.mobile-1.4.2.min.js',
        'js/script.js',
    ];

    public $depends = [
        'yii\web\YiiAsset',
        'yii\bootstrap\BootstrapAsset',
    ];
}

我做错了什么?


答案 1

我花了一段时间才弄清楚,但下面是 Yii2 源代码的相关部分

if ($this->sourcePath !== null && !isset($this->basePath, $this->baseUrl)) {
    list ($this->basePath, $this->baseUrl) = $am->publish($this->sourcePath, $this->publishOptions);
}

所以 Yii2 只有在设置了资源,并且没有设置(!)的情况下才会发布资源。后者把我绊倒了,看起来你也一样。$sourcePath$basePath$baseUrl

所以我有这个AppAsset,它正式发布

use yii\web\AssetBundle;


class AppAsset extends AssetBundle
{
public $sourcePath = '@app/assets/app';

public $css = [
    'css/openbook.css',
    'fontello/css/fontello.css',
    'fontello/css/animation.css'
];
public $js = [
    'js/plug.openbook.js',
    'js/plug.interpret.js',
    'js/plug.drop.message.js'
];
public $depends = [
   // 'yii\web\YiiAsset', 
   // 'yii\bootstrap\BootstrapAsset',
];
} 

当然,我在主布局

use frontend\assets\AppAsset;
...
AppAsset::register($this);

答案 2

要使用此应用程序或任何其他应用程序,您应该在视图中注册它

use app\assets\AppAsset;
AppAsset::register($this);

推荐