Пользовательские ресурсы виджета Yii2 не регистрируются

Я пытаюсь разработать собственный виджет, но наткнулся на стену. У меня есть некоторые сторонние файлы JS / CSS, которые мне нужно включить, но по какой-то причине Yii2 не будет их регистрировать. Я следовал всему в документации по Yii2, но, похоже, ничего не получил. Моя структура каталогов выглядит следующим образом:

компоненты
 — DildenFeedback.php
 — DildenFeedbackAsset.php
 — Просмотры/
  — feedback.php
 — активы /
  — feedback.min.js
  — feedback.min.css

DildenFeedback.php (класс виджетов)

<?php

namespace app\components\yii2feedbackwidget;

use Yii;
use yii\base\Widget;
use app\components\yii2feedbackwidget\DildenFeedbackAsset;

class DildenFeedback extends Widget
{

public function run() {
parent::run();
DildenFeedbackAsset::register($this->view);
return $this->render('feedback');
}
}

DildenFeedbackAsset.php (класс активов виджета)

<?php

namespace app\components\yii2feedbackwidget;
use yii\web\AssetBundle;

class DildenFeedbackAsset extends AssetBundle {

public $sourcePath = 'assets/';

public $css = ['assets/feedback.min.css'];
public $js = ['assets/feedback.min.js'];

public $depends = ['yii\web\JqueryAsset'];
}

Просмотр отзывов

?>
<script type="text/javascript">
$.feedback();
</script>

просмотров / макеты / main.php (Основной шаблон, который я пытался вызвать)

<?php $this->endBody() ?>
<?php
echo DildenFeedback::widget();
?>

Поэтому, когда я захожу, чтобы проверить страницу, feedback.min.js / css нигде не найти. Файл представления отображается правильно, но я предполагаю, что мой AssetBundle сформирован неправильно. Любая помощь приветствуется.

РЕДАКТИРОВАТЬ (Из ресурсов отладчика Yii):
sourcePath / var / www / public / components / yii2feedbackwidget / assets
basePath / var / www / public / web / assets / 7e80049a
baseUrl / assets / 7e80049a
css assets / feedback.min.css
js assets / feedback.min.js
зависит от yii \ web \ JqueryAsset

РЕДАКТИРОВАТЬ 2
Я проверил это на новой установке Yii2, и я получаю ту же ошибку.

2

Решение

Ну, вы должны просто исправить свои sourcePath :

class DildenFeedbackAsset extends AssetBundle {

public $sourcePath = '@app/components/assets/';

public $css = ['feedback.min.css'];
public $js = ['feedback.min.js'];

public $depends = ['yii\web\JqueryAsset'];
}

Вы также должны исправить свое мнение с помощью registerJs() вместо тега скрипта:

$this->registerJs('jQuery.feedback();');
1

Другие решения

Я решил это, и я чувствую себя немного глупо. То, к чему это привело, было местоположением вызова виджета. Как я отметил в своем первоначальном вопросе, я повторял виджет следующим образом:

<?php $this->endBody() ?>
<?php
echo DildenFeedback::widget();
?>

Однако я не обращал внимания на то, где был этот звонок. ДОЛЖЕН быть до вызова endBody

<?php
echo DildenFeedback::widget();
?>
<?php $this->endBody() ?>

Это закончило тем, что решило проблему. Спасибо Соджу за то, что он направил меня к вызову виджета.

1

По вопросам рекламы [email protected]