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?
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);
Pour utiliser ce AppAsset ou tout autre, vous devez l'enregistrer dans la vue
use app\assets\AppAsset;
AppAsset::register($this);
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);
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');