使用HtmlHelper进行数组到字符串转换错误

时间:2014-04-25 13:05:43

标签: cakephp

<?php
    $radifHa = array();
    foreach ($akhbars as $akhbar) {
        $radif = array();
        $radif[] = $this->Html->tag('h4', h($akhbar['Akhbar']['onvan']));
        $radifInfo = array();
        $radifInfo[] = h($akhbar['Akhbar']['created']);
        $radifInfo[] = $this->Html->tag('span', ':', array('class' => 'separator'));
        $radifInfo[] = 'by';
        $radifInfo[] = $this->Html->link($akhbar['User']['esmekochak'], array('controller' => 'users', 'action' => 'view', $akhbar['User']['id']));
        $radifInfo[] = $this->Html->tag('span', ':', array('class' => 'separator'));
        $radifInfo[] = '0 comments';
        $radif[] = array(implode(' ', $radifInfo), array('class' => 'post_info'));
        $radif[] = $this->Html->div('desc_block', h($akhbar['Akhbar']['kholase']));
    }

    $radifHa[] = $radif;

    if (!empty($radifHa)) {
       echo $this->Html->div('blog_post', h($radifHa));
   }
?>

我收到此错误

Notice (8): Array to string conversion [CORE\Cake\View\Helper\HtmlHelper.php, line 928]

我该如何解决这个问题?

我在Akhbar的索引视图中。

修复此备用代码,但我想修复上面的代码,可以吗?

<?php foreach ($akhbars as $akhbar): ?>
    <div class="blog_post">
        <h4><?php echo h($akhbar['Akhbar']['onvan']);?></h4>
        <div class="post_info">
        <?php echo h($akhbar['Akhbar']['created']);?>
        <span class="separator">:</span>
        By:<?php echo $this->Html->link($akhbar['User']['esmekochak'], array('controller' => 'users', 'action' => 'view', $akhbar['User']['id']));?>
        <span class="separator">:</span>
        0 comments
        </div>
        <div class="desc_block"><?php echo h($akhbar['Akhbar']['kholase']); ?></div>
    </div>
    <?php endforeach; ?>

1 个答案:

答案 0 :(得分:1)

你并没有告诉我们完全哪一行给你的错误(在视图中,而不是帮助者),但错误本身确实告诉你很多关于发生了什么。您只是传递一个应该传递字符串的数组。

Html->div接受Html->div(string, string, array),你正在做

echo $this->Html->div('blog_post', h($radifHa));

现在,。 h()函数说

  

string | array | object $ text要通过htmlspecialchars换行的文本。   也适用于数组和对象。数组将被映射并具有   所有元素都逃脱了。如果对象将被字符串转换   实现__toString方法。否则是班级名称   将被使用。

您正在将数组传递给h(),您将获得一个带有元素转义的映射数组。您可以看到该函数here的代码。第177行,它返回一个数组。因为Html->div并不喜欢数组作为第二个参数,所以它会抱怨。

你能做什么?不要使用阵列。在使用div之前自己展平数组,或者以其他方式而不是在数组中组织该字符串(比如在foreach中连接结果字符串而不是将它们存储在$radifHa中)。