Craft CMS 插件 AssetBundle 导致 Craft.js 后端错误

Craft CMS plugin AssetBundle Causeing Craft.js Error in Backend

插件将管理区域中的以下 url 路由到控制器。

url: /admin/custom_route

控制器加载 CpAssets::class 依赖的插件资产包并加载所有加载的 twig 模板,但浏览器控制台给出 Craft.js 的错误,即 Craft 未在 [=24= 中定义] 扩展插件功能。其中 Craft.js 和 Craft.min.js 都被加载,而应该只加载其中一个。

一直在研究 yii 的功能,但我不知所措。

解决同样问题的其他人的解决方案。

在您的 template.twig 中,您需要添加 head 标签并调用 head 函数,这样可以消除 Craft.js 错误。

<head>
{{ head() }}
</head>

我通过查看 src/web/assets/cp/CpAsset.php 找到了解决方案,其中第 98 - 103 行定义了缺少的 js Craft 对象。

// Define the Craft object
$craftJson = Json::encode($this->_craftData(), JSON_UNESCAPED_UNICODE);
$js = <<<JS
window.Craft = {$craftJson};
JS;
$view->registerJs($js, View::POS_HEAD);

其中View::POS_HEAD根据yii文档定义了脚本在文档中加载的位置。刚打电话

{{ head() }}

它需要在文档的 head 元素标签内。