cakephp foreach错误

时间:2012-05-23 06:18:56

标签: cakephp view

当尝试运行此代码蛋糕时,在视图中使用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>

2 个答案:

答案 0 :(得分:2)

几点:

foreach($invoice as $invoice):

应该是:

foreach($invoices as $invoice):

正如其他一些人所说。

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

你可以一起消除foreach:

答案 1 :(得分:1)

我发现你的代码存在一些问题,你应该清除它们并再试一次(我不认为错误是在foreach行上就像你说的那样)

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

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

class Invoice extends AppModel{ }

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

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

这样你就不会意外地覆盖原始数组中的某些东西......