web-dev-qa-db-fra.com

Comment gérer les actifs dans Yii2?

Par exemple, j'ai créé une nouvelle page et j'aimerais utiliser, par exemple, backbone.js, un fichier CSS personnalisé et une collection d'images. Où devrais-je déclarer tout cela dans Yii2? J'ai trouvé le module AppAsset.php, mais ce n'est que pour les fichiers css/js et je n'ai remarqué aucun changement lorsque mes fichiers css/js et mon chemin y ont été déclarés:

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

Qu'est-ce que je fais mal? 

21
paus

Il m'a fallu un certain temps pour le comprendre, mais ci-dessous se trouve le 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 des actifs que si $sourcePath est défini et si $basePath et $baseUrl ne sont pas définis (!). Ce dernier m'a fait trébucher et il semble que ce soit la même chose 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 disposition principale

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

pour utiliser cet AppAsset ou tout autre, vous devez l'enregistrer dans view

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

Au début, vous devriez 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 en actionQuelque chose comme ça:

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