繁体   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