Я пытаюсь разработать собственный виджет, но наткнулся на стену. У меня есть некоторые сторонние файлы 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, и я получаю ту же ошибку.
Ну, вы должны просто исправить свои 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();');
Я решил это, и я чувствую себя немного глупо. То, к чему это привело, было местоположением вызова виджета. Как я отметил в своем первоначальном вопросе, я повторял виджет следующим образом:
<?php $this->endBody() ?>
<?php
echo DildenFeedback::widget();
?>
Однако я не обращал внимания на то, где был этот звонок. ДОЛЖЕН быть до вызова endBody
<?php
echo DildenFeedback::widget();
?>
<?php $this->endBody() ?>
Это закончило тем, что решило проблему. Спасибо Соджу за то, что он направил меня к вызову виджета.