代码之家  ›  专栏  ›  技术社区  ›  Sanfly

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

  •  0
  • Sanfly  · 技术社区  · 7 年前

    我有我的登记簿。我的用户插件中的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') ?>
    

    但到目前为止,什么都没起作用。。。有什么提示吗?

    4 回复  |  直到 7 年前
        1
  •  0
  •   kicaj    7 年前

    在蛋糕中使用“plugins”这个词是不明确的,因为插件可以在 plugins/ 目录或可以(由Composer)安装到 vendor/ 目录

    更正中的参数 script(); HtmlHelper中的方法是 Users.password-compare ,但这是针对 插件/ 目录

    如果您作为供应商使用插件 loadPlugin('CakeDC/Users') 在引导中。php文件,并且“vendor/cakephp plugins.php”文件中有正确的路径,所有这些都可以正常工作。

        2
  •  0
  •   Sanfly    7 年前

    我最后只是添加了以下代码,工作很好,但没有我喜欢的那么优雅。。。

    <script src="<?= $this->request->webroot ?>/cake_d_c/users/js/password-compare.js"></script>
    
        3
  •  0
  •   Andrs Avelino Monasterio Moren    7 年前

    在Cakephp 3.4及以上版本中,我的工作如下:

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

    如果没有['block'=>true],则不会在html中显示脚本标记。

        4
  •  0
  •   Aris    3 年前

    对于不熟悉短echo标记的人来说,这是一个不太明显的小细节。

    这是:

    <?= $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