cakephp 3.0 $ this->输出函数不存在错误

时间:2015-11-04 07:30:05

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

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

谢谢

1 个答案:

答案 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路径等等。

另见