Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在CakePHP中使用插件javascript脚本加载插件图像?_Javascript_Html_Image_Url_Cakephp - Fatal编程技术网

如何在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中 从脚本到图像的相对路径不起作用(。/

我的CakePHP插件中有一个(javascript)脚本,它在当前查看的文档中创建一个
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
在早期版本的CakePHP中,资产调度是自动的,而在2.2+中

处理插件资产的正常方法是不使用资产分派筛选器,而是将文件复制(或符号链接)到应用程序webroot,路径与url对应,即:

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';