我的CakePHP插件中有一个( javascript )脚本,它在当前查看的文档中创建了一个img
标记。问题是,到目前为止,每次尝试提供有效的图像源都失败了。该插件位于 CakePHP库(不是CakePHP应用程序)的插件目录中,因为我们将它用于几个具有大量共享的独立应用程序。
图片位于/cake/plugins/Corporate/webroot/img
。
( javascript )脚本位于/cake/plugins/Corporate/webroot/js
。
从脚本到图像的相对路径不起作用(../img/image.png
)。 CakePHP路由路径(/Corporate/img/image.png
)也不起作用,如果我在前面添加插件名称则是独立的。
答案 0 :(得分:2)
在PluginName插件中访问webroot资产的正确途径是以下形式:
/ PLUGIN_NAME /路径
即:
App/Plugin/Corporate/webroot/img/image.png
/corporate/img/image.png
在CakePHP的早期版本中,资产调度是自动的,而在2.2 + asset dispatching must be explicitly enabled中。
处理插件资产的常规方法是不使用资产调度过滤器并将文件复制(或符号链接)到与应用程序webroot相对应的路径,即:
cd App
cp -R Plugin/Corporate/webroot webroot/corporate
这意味着请求的URL直接映射到应用程序webroot文件夹中的文件 - 在提供这些文件时没有调用php逻辑,除了其他好处之外,还提供了提供此类资产significantly faster。
如果应用程序始终是,始终作为域的根目录(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
来知道根网址是什么,如下所示:
var imagePath = ROOT . 'corporate/img/image.png';
无论应用程序的安装方式如何,都可以使用相同的javascript。
答案 1 :(得分:1)
您可以使用此代码
<?php echo $this->Html->image("recipes/6.jpg", array( "alt" => "Brownies", 'url' => array('controller' => 'recipes', 'action' => 'view', 6))); ?>
答案 2 :(得分: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区分大小写。