web-dev-qa-db-ja.com

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',
    ];
}

何が間違っていますか?

22
paus

それを理解するのにしばらく時間がかかりましたが、以下は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);
31
Ivo Renkema

このAppAssetまたはその他を使用するには、viewで登録する必要があります

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

最初に、新しいjsファイルとcssファイルを使用してapp/assets /フォルダーにSomeAssetクラスを作成する必要があります。プロパティをオーバーロードしてAppAssetを拡張できます。

次に、SomeControllerでこれを使用します

use Yii;
use app\assets\SomeAsset;

そして、このようなもの:

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