在编码器视图上查找每个未定义变量错误


Foreach undefined variable error on codeigniter view

我在我的视图中有这个错误,无法找出问题是什么。

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错误

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);
}

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

编辑:

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

输入<?php foreach($commentsList as $c): ?>

注意:你仍然不能使用<?标签,因为这些是问题所在。

第二个编辑:

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

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

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

查看详细信息

试试这个:

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

出现了奇怪的错误。当foreach循环中没有HTML时,为什么要使用PHP标记?还是生产代码不同?

您可以使用以下代码(变通)使代码工作:

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

大家,谢谢。我用这种方法解决了问题。我把控制器改成了这个。传递给控制器的对象数组似乎比传递给控制器的数组要好。

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?>

查看控制器代码后:你需要在一个关联数组中传递$comments给view:

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