簡體   English   中英

Yii2 自定義小部件資產未注冊

[英]Yii2 custom widget assets not registering

我正在嘗試開發一個自定義小部件,但我遇到了牆。 我有一些需要包含的第三方 JS/CSS 文件,但無論出於何種原因,Yii2 都不會注冊它們。 我已經遵循了 Yii2 文檔中的所有內容,但似乎一無所獲。 我的目錄結構如下:

成分
- DildenFeedback.php
- DildenFeedbackAsset.php
- 意見/
-- 反饋.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>

views/layouts/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 資產/feedback.min.css
js 資產/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() ?>

這最終解決了這個問題。 感謝 Soju 指導我進行小部件調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM