0

当试图运行这个代码蛋糕时,我们的 foreach 循环在视图中抛出了一个错误,我将包括模型、控制器和视图。此代码的最终目标是打印出用户自己的发票,而不是数据库中的每张发票。

模型

<?php
    class Invoice extends AppModel{ 
    var $name='invoice'; 
    public $useTable = 'invoices';
    public $primaryKey = 'id';}

具有相关功能的控制器

<?php

class InvoicesController extends AppController{

    public function index(){
            $this->set('title_for_layout', 'indexPage');
        }


public function payinvoice($id = null){
        $this->set('title_for_layout', 'Pay Invoice');
        $this->set('stylesheet_used', 'homestyle');
        $this->set('image_used', 'eBOXLogoHome.jpg');   
        $this->layout='home_layout';


        $this->set('invoice', $this->Invoice->read(null, $id));
} 

 public function viewinvoice(){
        $this->set('title_for_layout', 'View invoice');
        $this->set('stylesheet_used', 'homestyle');
        $this->set('image_used', 'eBOXLogoHome.jpg');   
}

查看文件

<table width="100%" border="1">

            <table width="100%" border="1">
                <tr>
                    <th>Biller</th>
                    <th>Subject</th>
                    <th>Date</th>
                    <th>Action</th>
                </tr>
            <?php foreach($invoice as $invoice): ?>
            <tr><td align='center'>
<?php echo $this->Html->link($invoice['Invoice']['biller'], 
array('action' => 'viewinvoice', $invoice['Invoice']['id'])); ;?> </td>
<td align='center'><?php echo $invoice['Invoice']['subject']; ?></td>
<td align='center'><?php echo $invoice['Invoice']['datecreated']; ?></td>
<td align='center'><a href="viewinvoice"><button>View Invoice</button></a><a href="disputeinvoice"><button>Dispute Invoice</button></a></td>
</tr><?php endforeach; ?>

            </table>
4

2 回答 2

2

几点:

foreach($invoice as $invoice):

应该:

foreach($invoices as $invoice):

正如其他一些人所提到的。

但根本的问题是,您读入 $invoice 的数据结构是一条记录,而不是多条记录的数组。

您可以一起取消 foreach :

于 2012-05-23T08:37:11.940 回答
1

我发现您的代码存在一些问题,您应该清除这些并重试(我认为错误不像您所说的那样出现在 foreach 行)

class Invoice extends AppModel{ 
    var $name='invoice'; 
    public $useTable = 'invoices';
    public $primaryKey = 'id';
}

您在此处定义的所有属性都是默认值,因此无需定义它们,您可能需要的唯一一个是var $name如果您使用的是 PHP 4,否则您的模型可能只是:

class Invoice extends AppModel{ }

接下来,尽量不要将您的 foreach 迭代器变量命名为与您正在迭代的数组相同,这可能是您的问题的原因。就我个人而言,我倾向于先调用数组$items,然后再调用其中的每个元素$item

<?php foreach($invoices as $invoice): ?>

这样你就不会意外覆盖原始数组中的某些内容......

于 2012-05-23T08:10:21.250 回答