NoizeMC
@NoizeMC
junior PHP (Yii2) разработчик

Почему не срабатывает appendTimestamp для нескольких AssetBundle, а для остальных работает?

В файле web.php все прописано:

$config = [
....
	'components' => [
		'assetManager' => [
			'appendTimestamp' => true
		],


Если файл, например, admin.js подключен здесь, то appendTimestamp не срабатывает:
<?php
namespace app\assets;

use yii\web\AssetBundle;

class AdminAsset extends AssetBundle
{
	public $css = [
		'css/admin.css',
    	'css/icons.css',
	];
	public $js = [
		'js/admin.js'
	];
public $depends = [
		'\yii\web\YiiAsset',
		'\app\assets\BootstrapSwitchAsset',
		'\app\assets\TizixBootstrapAsset',
		'\app\assets\JqueryUIAsset',
		'\app\assets\TinyMceAsset',
        '\app\widget\uploader\assets\UploaderAssets',
	];


а если в AppAsset, то все работает:
<?php
namespace app\assets;

use yii\web\AssetBundle;

class AppAsset extends AssetBundle
{
    public $basePath = '@webroot';
    public $baseUrl = '@web';
    public $js = [
		'js/admin.js',
    ];
    public $depends = [
        '\yii\web\YiiAsset'
    ];


Не могу понять, в чем прикол?
  • Вопрос задан
  • 667 просмотров
Решения вопроса 1
qonand
@qonand
Software Engineer
Посколько в AdminAsset не установлены свойства basePath и baseUrl, они подхватываются с соответствующих свойств менеджера ресурсов. А в менеджере ресурсов они установлены в значение @webroot/assets и @web/assets соответственно. У Вас файл admin.js находиться в директории @webroot/js/admin.js, а из-за неустановленных свойств комплекта ресурса менеджер его ищет по пути @webroot/assets/js/admin.js, поэтому и наблюдаются проблемы с AdminAsset. С AppAsset такие проблемы не наблюдаются т.к. Вы в нем задаете корректные пути к файлам
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
NoizeMC
@NoizeMC Автор вопроса
junior PHP (Yii2) разработчик
Проблема решилась добавлением:
public $basePath = '@webroot';
public $baseUrl = '@web';

в AdminAsset
Но почему не работало без этого?
Ответ написан
Комментировать
Alexufo
@Alexufo
противоречивый, сложный, весь компьютерный.
Имейте ввиду гульщики - пути должны быть без первого слеша
то есть так будет работать
public $js = [
    'js/admin.js',
    ];

И так, но только таймштампа не будет.
public $js = [
    '/js/admin.js',
    ];


пришлось индуса подключать пока дошло почему не работает.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы