簡體   English   中英

如何在Yii2中管理資產?

[英]How do I manage assets in 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',
    ];
}

我究竟做錯了什么?

我花了一段時間來弄明白,但下面是Yii2源代碼的相關部分

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

因此,只有在設置了$sourcePath並且未設置$basePath$baseUrl baseUrl時,Yii2才會發布資產(!)。 后者絆倒了我,看起來你也一樣。

所以我有這個適當發布的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);

要使用此AppAsset或任何其他,您應該在視圖中注冊它

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

首先,您應該使用新的js和css文件在app / assets /文件夾中創建SomeAsset類。 您可以擴展AppAsset重載其屬性。

接下來在SomeController中使用它

use Yii;
use app\assets\SomeAsset;

並在行動中像這樣:

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

從個人經驗來看,資產是Yii的一個部分,我覺得非常令人沮喪。

很難可靠地找出文件的位置,並且打開和關閉調試模式來回切換會造成進一步的挫敗感。

我建議廢棄資產處理並將所有JS文件保存在一個文件夾中,然后它可以包含如下:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM