如何在Yii2中管理资产?

时间:2014-09-05 13:22:01

标签: php assets yii2

例如,我创建了一个新页面,我想使用例如backbone.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',
    ];
}

我做错了什么?

4 个答案:

答案 0 :(得分:30)

我花了一段时间来弄明白,但下面是Yii2源代码的relevant part

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

因此,只有在$sourcePath设置为$basePath且未设置$baseUrluse 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', ]; } 时,Yii2才会发布资源(!)。后者绊倒了我,看起来你也一样。

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

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

当然,我有主要的布局

{{1}}

答案 1 :(得分:4)

要使用此AppAsset或其他任何您应在视图

中注册它
use app\assets\AppAsset;
AppAsset::register($this);

答案 2 :(得分:0)

首先,您应该使用新的js和css文件在app / assets /文件夹中创建SomeAsset类。 您可以扩展AppAsset重载其属性。

接下来在SomeController中使用它

use Yii;
use app\assets\SomeAsset;

并且在行动中像这样:

SomeAsset::register(Yii::$app->view);

答案 3 :(得分:-4)

从个人经验来看,资产是Yii的一个部分,我觉得非常令人沮丧。

很难可靠地找出文件的位置,并且打开和关闭调试模式来回切换会造成进一步的挫败感。

我建议废弃资产处理并将所有JS文件保存在一个文件夹中,然后可以像这样包含它:

Yii::app()->clientScript->registerScriptFile('/js/jquery.jeditable.mini.js');