我在我的cakephp 3.x应用程序中使用2.x的图像助手,但是我遇到了这个问题,在我的cakephp 2.x中函数返回值如下代码
return $this->output(sprintf($this->Html->_tags['image'], $this->webroot($relfile), $this->Html->_parseAttributes($htmlAttributes, null, '', ' ')), $return);
但在cakephp 3.x输出和_parseAttributes函数被删除所以我不知道如何在cakephp 3.x中使用这两个函数
_parseAttributes函数包含图像相关数据,如' class',' alt'其他事情
我在网上搜索了很多关于蛋糕3.x的输出功能,但没有找到任何成功的解决方案请尽量帮助我
谢谢
答案 0 :(得分:1)
Html
助手您的示例代码中没有任何内容可以证明使用自定义代码来生成代码,因此您只需使用Html
帮助程序
// ...
class YourCustomHelper extends Helper
{
public $helpers = [
'Html',
// ...
];
public function someMethod($relfile, array $htmlAttributes)
{
$options = $htmlAttributes + ['pathPrefix' => false];
return $this->Html->image($url, $options);
}
// ...
}
请注意使用pathPrefix
选项,因为看起来您想要指向自定义路径,您应该禁用它,否则您最终可能会将默认的图像基本URL添加到路径前面
如果您确实需要其他帮助程序尚未涵盖的自定义解决方案,则output()
和_parseAttributes()
的替换为return
和字符串模板
为了提供一个例子,这里有HtmlHelper::image()
所做的精简:
use Cake\Core\Configure;
use Cake\View\StringTemplateTrait;
// ...
class YourCustomHelper extends Helper
{
use StringTemplateTrait;
protected $_defaultConfig = [
'templates' => [
'someTemplate' => '<img src="{{url}}"{{attrs}}/>',
],
// ...
];
public $helpers = [
'Url',
// ...
];
public function someMethod($relfile, array $htmlAttributes = [])
{
$url = $this->Url->assetUrl($relfile);
$templater = $this->templater();
return $templater->format('someTemplate', [
'url' => $url,
'attrs' => $templater->formatAttributes($htmlAttributes),
]);
}
// ...
}
这应该是自我解释,你包括保存模板功能的StringTemplateTrait
,定义自定义模板,并使用模板进行格式化。
请注意使用Url
帮助程序,它会执行所有必要的操作,例如对URL进行编码,为其添加时间戳,添加webroot路径等等。
另见