Codeigniter视图上的Foreach未定义变量错误

时间:2013-02-28 08:16:34

标签: php codeigniter view foreach undefined

我在视图中出现此错误,无法找出问题所在。

A PHP Error was encountered

Severity: Notice

Message: Undefined variable: c

Filename: views/commentsList.php

Line Number: 10 

这是我的观看代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>

<div id="commentsByParentId">
   <?foreach($comments as $c):?>
        <?=$c['comment']?>
    <?endforeach?>

</div>
</body>
</html>

$comments是来自控制器的数组。 $c是循环变量,所以我无法理解为什么它会捕获 undef var error

UPD:这是我的控制器代码

public function viewCommentsListByParentId($parentid) {
    $data = array();
    $data = $this->em->getRepository('Entities\Comment')->findBy(array('parentid' => $parentid));
    $comments = array();
    for ($i=0; $i<count($data); $i++){
        $comments[$i]['comment'] = $data[$i]->getComment();
    }
    $this->load->view('commentsList', $comments);
}

5 个答案:

答案 0 :(得分:1)

您的服务器是否允许<?个标记。有些配置没有,他们会把它们变成常规的html注释。试试<?php foreach($comments as $c): ?>,看看是否可以解决问题。

编辑:

现在我们修复了这个错误,它不知道$ comments是什么。那是因为在你的控制器中你将它定义为$ commentsList:

所以你需要<?php foreach($commentsList as $c): ?>

注意:您仍然无法使用<?标记,因为这些标记首先是问题。

第二次编辑:

我查了CodeIgnitor的文档,它说你必须包含在$this->load->view('view_name', $data);中,其中data是一个值数组,其中键是视图中使用的变量名,值是值键。

所以试试这个:$this->load->view('view-name', array('comments' => $comments));

然后在视图中返回<?php foreach($comments as $c): ?>

有关详细信息,请参阅this

答案 1 :(得分:0)

查看控制器代码后: 您需要在关联数组中传递$注释才能查看:

$data['comments'] = $comments; 
$this->load->view('commentsList', $data);

答案 2 :(得分:0)

试试这个:

<?php 
foreach($comments as $c){
    echo $c['comment'];
}
?>

答案 3 :(得分:0)

你遇到了奇怪的错误。为什么在foreach循环中没有HTML时使用速记PHP标记?或者生产代码是否不同?

您可以使用以下代码(解决方法)使代码正常工作:

<?php
    foreach($comments as $key=>$c) {
        if(isset($c) && isset($c['comment'])) {
            echo $c['comment'];
        } else {
            echo 'Error at index ' . $key;
        }
    }
?>

请报告您返回的manu错误。

答案 4 :(得分:0)

大家,谢谢。我这样解决了问题。我把控制器改成了这个。传递控制器对象数组似乎比数组数组更好。

public function viewCommentsListByParentId($parentid) {
    $data = array();
    $data['comments'] = $this->em->getRepository('Entities\Comment')->findBy(array('parentid' => $parentid));
    $this->load->view('commentsList', $data);
}

并将我的观点改为

   <?php foreach($comments as $c):?>
        <?=$c->getComment()?><br>
    <?php endforeach?>