0

PHPとZendFrameworkは初めてです。私はエラーに遭遇しました:

注意:未定義のインデックス: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();
}

これは、データベース内のカテゴリ「Tops」の行を取得するためのModelでのgetTopsアクションです。

<?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全体をウォーク(反復)することです。最初の実行では、は、2番目の実行では、、というように続きます。$this->item$item$item$this->item[1]$item$this->item[2]

したがって、構成内に変更$this->itemします。$itemforeach

于 2012-08-08T11:57:12.473 に答える