Comment gérer les actifs dans Yii2?

Par exemple, j'ai créé une nouvelle page, et je voudrais utiliser, par exemple, backbone.js, fichier CSS personnalisé et une collection d'images. Où devrais-je déclarer tout cela dans Yii2? J'ai trouvé L'AppAsset.module php, mais ceci est seulement pour les fichiers css / js et je n'ai pas remarqué de changements lorsque mes fichiers css / JS et mon chemin ont été déclarés là:

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 = [
        'yiiwebYiiAsset',
        'yiibootstrapBootstrapAsset',
    ];
}

Qu'est-ce que je fais de mal?

21
demandé sur ankitr 2014-09-05 17:22:01

4 réponses

Il m'a fallu un certain temps pour le comprendre, Mais voici la partie pertinente du code source Yii2

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

Donc Yii2 ne publiera les actifs que si $sourcePath est défini, et que $basePath et $baseUrl ne sont pas définis(!). Ce dernier m'a fait trébucher, et il semble que la même chose vaut pour vous.

J'ai donc cet AppAsset, qui publie dûment

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

Bien sûr, j'ai dans la mise en page principale

use frontend\assets\AppAsset;
...
AppAsset::register($this);
30
répondu Ivo Renkema 2014-12-03 15:28:23

Pour utiliser ce AppAsset ou tout autre, vous devez l'enregistrer dans la vue

use app\assets\AppAsset;
AppAsset::register($this);
4
répondu Herokiller 2014-11-06 04:57:49

Au début, vous devez créer une classe SomeAsset dans votre dossier app / assets / avec vos nouveaux fichiers js et css. Vous pouvez étendre votre AppAsset en surchargeant ses propriétés.

Ensuite, utilisez ceci dans SomeController

use Yii;
use app\assets\SomeAsset;

Et dans actionscertains comme ceci:

SomeAsset::register(Yii::$app->view);
0
répondu Correcter 2018-01-21 09:26:38

Par expérience personnelle, les actifs sont l'une des parties de Yii que j'ai trouvé extrêmement frustrant.

Il est difficile de savoir de manière fiable où le fichier va être et la commutation d'avant en arrière avec le mode de débogage activé et désactivé va créer une frustration supplémentaire.

Je suggère de supprimer la gestion des actifs et de garder tous vos fichiers JS dans un dossier, alors il peut être inclus comme ceci:

Yii::app()->clientScript->registerScriptFile('/js/jquery.jeditable.mini.js');
-4
répondu Keith Grey 2015-01-29 18:23:49