当尝试运行此代码蛋糕时,在视图中使用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>
答案 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): ?>
这样你就不会意外地覆盖原始数组中的某些东西......