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