4

我的CakePHP 插件中有一个 ( javascriptimg ) 脚本,它在当前查看的文档中创建一个标签。问题是,直到现在,每次提供有效图像源的尝试都失败了。该插件位于CakePHP 库(而不是 CakePHP 应用程序)的插件目录中,因为我们将它用于几个具有很多共同点的独立应用程序。

图像位于/cake/plugins/Corporate/webroot/img.

( javascript ) 脚本位于/cake/plugins/Corporate/webroot/js.

从脚本到图像的相对路径不起作用 ( ../img/image.png)。/Corporate/img/image.pngCakePHP的路由路径(

4

3 回答 3

2

使用正确的路径

在 PluginName 插件中获取 webroot 资产的正确路径是:

/plugin_name/路径

IE:

  • 文件路径:App/Plugin/Corporate/webroot/img/image.png
  • 网址:/corporate/img/image.png

在 CakePHP 的早期版本中,资产调度是自动的,而在 2.2+ 版本中,资产调度必须显式启用

处理插件资产的正常方法是使用资产调度过滤器并将文件复制(或符号链接)到与 url 对应的相同路径中的应用程序 webroot 即:

cd App
cp -R Plugin/Corporate/webroot webroot/corporate

这意味着请求的 url 直接映射到应用程序 webroot 文件夹中的文件 - 在提供这些文件时没有调用 php 逻辑,这有利于显着加快提供此类资产的速度

处理javascript中的路径

如果应用程序始终安装为域的根 ( http://example.com),则绝对没有复杂性 - 只需参考图像的相对路径:

var imagePath = '/corporate/img/image.png';

但是,如果应用程序的根是可变的(http://example.com/, http://exmaple.com/sub/folder/, http://localhost/someproject/) - 有必要告诉javascript 考虑应用程序的根。例如将以下内容放入布局文件中:

<head>
    ...
    <script>ROOT = '<?= $this->Html->url('/'); ?>';</script>
</head>
<body>
    <?= $this->fetch('content'); ?>
    ...
</body>

这样,javascript 可以在ROOT任何地方引用全局来知道根 url 是什么,如下所示:

var imagePath = ROOT . 'corporate/img/image.png';

这使得无论应用程序如何安装都可以使用相同的 javascript。

于 2014-06-11T12:20:11.187 回答
1

你可以使用这个代码

<?php echo $this->Html->image("recipes/6.jpg", array(    "alt" => "Brownies",    'url' => array('controller' => 'recipes', 'action' => 'view', 6))); ?>
于 2012-04-28T13:26:03.867 回答
0

虽然,这个问题已经很老了,但我仍然想为其他正在寻找它的人回答这个问题

你可以使用

<?php 
    echo $this->Html->image( $this->Html->url('/', true).'{plugin_name}/{folder_name}/{asset_name}');
?>

例如,

<?php 
    echo $this->Html->image( $this->Html->url('/', true).'Corporate/img/image.png');
?>

请注意,plugin_name 和asset_name 区分大小写。

于 2014-06-11T11:54:36.890 回答