如何在CakePHP中使用插件javascript脚本加载插件图像?
我的CakePHP插件中有一个(javascript)脚本,它在当前查看的文档中创建一个如何在CakePHP中使用插件javascript脚本加载插件图像?,javascript,html,image,url,cakephp,Javascript,Html,Image,Url,Cakephp,我的CakePHP插件中有一个(javascript)脚本,它在当前查看的文档中创建一个img标记。问题是,到目前为止,提供有效图像源的每次尝试都失败了。该插件位于CakePHP库(而不是CakePHP应用程序)的插件目录中,因为我们将其用于几个具有许多公用程序的独立应用程序 图像位于/cake/plugins/Corporate/webroot/img中 (javascript)脚本位于/cake/plugins/Corporate/webroot/js中 从脚本到图像的相对路径不起作用(。/
img
标记。问题是,到目前为止,提供有效图像源的每次尝试都失败了。该插件位于CakePHP库(而不是CakePHP应用程序)的插件目录中,因为我们将其用于几个具有许多公用程序的独立应用程序
图像位于/cake/plugins/Corporate/webroot/img
中
(javascript)脚本位于/cake/plugins/Corporate/webroot/js
中
从脚本到图像的相对路径不起作用(。/img/image.png
)。CakePHP路由路径(/Corporate/img/image.png
)也不起作用,这与我是否预先输入插件名称无关。您可以使用此代码
<?php echo $this->Html->image("recipes/6.jpg", array( "alt" => "Brownies", 'url' => array('controller' => 'recipes', 'action' => 'view', 6))); ?>
尽管这个问题已经很老了,但我还是想为其他寻找它的人回答这个问题 你可以用
<?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');
?>
请注意,插件名称和资产名称区分大小写。请使用正确的路径
获取PluginName插件中webroot资产的正确路径如下:
/插件名称/路径
即:
- 文件路径:
App/Plugin/Corporate/webroot/img/image.png
- Url:
/corporate/img/image.png
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。很抱歉,我表达得不够清楚:这不是关于用cake的Html助手嵌入图像,而是通过javascript在当前查看的文档上插入图像。这个答案可能会帮助您感谢您的提示,但不幸的是,这不是解决办法。这实际上不是一个与javascript或嵌入图像相关的问题,而是源图像使用的路径。CakePHP进行了大量(奇怪的)重新路由,我们希望避免使用绝对URL,因为应用程序在多台主机上运行……为什么要使用奇怪而复杂的图像路由语法?您可以将$this->Html->url('/',true)
替换为字符串/
。这里没有提到plugin_名称是小写和下划线的(而plugins本身是有背景的)-第二个例子基本上是错误的-更多信息。对于这种复杂和奇怪的语法,我感到抱歉。我之所以使用它,是因为插件应该在不同的应用程序中重用,如果有人没有在他的项目中定义root,那么插件资产将不会加载$this->Html->image('/corporate/img/image.png')
如果应用程序安装在根目录下,则会指向/corporate/image/image.png
,或者/subfolder/corporate/image/image.png
如果应用程序安装在/subfolder/
等中。基本上路由器::url('/')
总是相对于应用程序的已安装根目录,而不是域名。好的,谢谢你澄清了我的概念。实际上,我正在将我当前的url发送到我项目中的某个api,该api需要完整的url,这就是为什么simple/some_路径不起作用的原因,所以我使用了路由器。
var imagePath = ROOT . 'corporate/img/image.png';