【问题标题】:cakephp 3.0 $this->output function does not exist errorcakephp 3.0 $this->输出函数不存在错误
【发布时间】:2023-12-21 11:35:02
【问题描述】:

我在我的 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 中的输出功能,但没有找到任何成功的解决方案,请尝试帮助我

谢谢

【问题讨论】:

  • 你能提供你期望的html代码吗?
  • 预期代码为

标签: cakephp migration cakephp-3.0 helper view-helpers


【解决方案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 路径等...

另见

【讨论】: