CakePHP 3 插件在模板文件中引用 JS

CakePHP 3 Plugin reference JS in a Template file

我的 register.ctp 模板文件在我的用户插件中,我想引用也在我的插件中的 js 文件

vendor/cakedc/users/webroot/js/password-compare.js

如何在我的模板文件中引用此 js 文件?

我试过了

<?= $this->Html->script("password-compare"); ?>
<?= $this->Html->script("Users.password-compare"); ?>
<?= $this->Html->script("/Users/webroot/js/password-compare"); ?>

然后

<?= $this->fetch('script') ?>

但到目前为止没有任何效果...有任何提示吗?

在 Cake 中使用 "plugins" 这个词是不明确的,因为插件可以在 plugins/ 目录中本地化,也可以(通过 Composer)安装到 vendor/ 目录。

HtmlHelper 中 script(); 方法中的正确参数是 Users.password-compare,但这适用于 plugins/ 目录中的插件。

如果您像供应商一样使用插件并且您在 bootstrap.php 文件中有 loadPlugin('CakeDC/Users') 并且文件 "vendor/cakephp-plugins.php" 中有正确的路径,那么一切都应该工作正常。

我最后只是添加了以下代码,工作正常但不如我喜欢的那么优雅...

<script src="<?= $this->request->webroot ?>/cake_d_c/users/js/password-compare.js"></script>

在 Cakephp 3.4 及以上的版本中,这项工作对我来说:

<?php
/**
 * @var \App\View\AppView $this
**/
$this->Html->script('password-compare.js', ['block' => true]);
?>

没有 ['block' => true] 不在 html 脚本标签中显示。

对于不熟悉短回显标签的人来说,不是很明显的小细节。

这个:

<?= $this->Html->script("Users.password-compare"); ?>

等同于:

<?php echo $this->Html->script("Users.password-compare"); ?>

您需要回显资产。这是我的脚本未加载的问题,因为我是从 2.10 迁移过来的,那里不需要 echo。

请看:https://book.cakephp.org/3/en/plugins.html#linking-to-assets-in-plugins