0

我是 PHP 和 Zend 框架的新手。我遇到了错误:

注意:未定义的索引:第 58 行 C:\xampp\htdocs\blogshop\application\views\scripts\item\tops.phtml 中的 itemid

我不明白为什么会出现这个错误。

public function topsAction() //tops action
{
    //$tops = new Application_Model_DbTable_Item();
    //$tops->getTops();
    $item = new Application_Model_DbTable_Item(); //create new Item object
    $this->view->item = $item->getTops();  //$this->view->item  is pass to index.phtml
}   

这是我的控制器代码。

public function getTops()
{
    $row = $this->fetchAll('itemtype = "Tops"'); //find Row based on 'Tops'
    if (!$row) { //if row can't be found
        throw new Exception("Could not find Tops!"); //Catch exception where itemid is not found
    }
    return $row->toArray();
}

这是我在模型中的 getTops 操作,用于在我的数据库中获取类别为“Tops”的行。

<?php foreach($this->item as $item) : ?>
    <?php echo $this->escape($this->item['itemid']);?> // This is where the error happens
    <img src="<?php echo $this->escape($item->image);?>" width="82" height="100">
    <?php echo $this->escape($this->item['itemname']);?>
    <?php echo $this->escape($this->item['description']);?>
    <?php echo $this->escape($this->item['itemtype']);?>
<?php endforeach; ?>

这是我显示数据库中所有行的代码。

4

1 回答 1

2

itemid您的数组中没有指定索引$this->item,这就是您收到错误的原因。

此外,您的代码似乎有点错误:

<?php foreach($this->item as $item) : ?>
    <?php echo $this->escape($this->item['itemid']);?>
    <img src="<?php echo $this->escape($item->image);?>" width="82" height="100">
    <?php echo $this->escape($this->item['itemname']);?>
    <?php echo $this->escape($this->item['description']);?>
    <?php echo $this->escape($this->item['itemtype']);?>
<?php endforeach; ?>

$this->item语句内部的每个foreach都应该替换$item为迭代才能工作。所以它将是$item['itemid'],$item['itemname']等。您缺少对数组更深层次的了解,从而使迭代变得foreach无用。

我想$this->item看起来像这样:

array (
  1 => 
  array (
    'itemid' => 1,
    'itemname' => 'foobar',
  ),
  2 => 
  array (
    'itemid' => 2,
    'itemname' => 'bazqux',
  ),
)

这就是为什么$this->item['itemid']什么都不返回,因为它不存在。$this->item[1]['itemid']然而确实如此。循环可以帮助您foreach做的是它遍历(迭代)整个$this->item数组,每个值都表示为$item循环内。在第一次运行中,$item$this->item[1],在第二次中,$item$this->item[2],等等,等等。

因此,更改$this->item$item内部foreach构造。

于 2012-08-08T11:57:12.473 回答