我有一张订单来购买凭证,但出于某种原因,现在当我点击phurcase时,它会显示一个空白屏幕。我无法看到发生了什么变化以及为什么视图没有从控制器传递信息。
Vourchers表格
<h2>Vouchers</h2>
<?php
foreach($vouchers as $v){
?>
<div id="voucher_box" class="add_shadow column span-8">
<h3><?=$v['Voucher']['title'];?></h3>
<p>
<?=$v['Voucher']['description'];?>
</p>
<?php
echo $this->Form->create('Voucher',array('id'=>'ResVoucherForm','url'=>'/res/voucher'));
echo $this->Form->input('slug',array('type'=>'hidden','value'=>$v['Voucher']['slug']));
?>
<select id="VoucherPrice" name="data[Voucher][price]">
<? $prices = explode(',',$v['Voucher']['prices'])?>
<? foreach($prices as $price){?>
<option value="<?=$price?>">€ <?=$price?></option>
<? } ?>
</select>
<div class="submit"><input type="submit" id="check_rates" value="Purchase this" class="ui-button ui-widget ui-state-default ui-corner-all" /></div>
</form>
</div>
<?
}
?>
控制器
function voucher() {
$this->layout = '360';
$msg[0] = array(); // 0 = bad messages
$msg[1] = array(); // 1 = good messages
$total_price = 0.00;
if(isset($data['Voucher'])) { $this->data['Voucher'] = $data['Voucher']; }
if(isset($this->data['Voucher'])) {
// if we have posted a voucher purchase: add it to session array
if(isset($this->data['Voucher']['slug'])){
$slug = $this->data['Voucher']['slug'];
$voucher = $this->getVoucher($slug);
$voucher['Voucher']['price'] = $this->data['Voucher']['price'];
$vouchers = $this->Session->read('Res.Vouchers'); // read existing voucher orders
if(is_array($vouchers) && isset($voucher['Voucher'])){
$temp['id'] = $voucher['Voucher']['id'];
$temp['title'] = $voucher['Voucher']['title'];
$temp['description'] = $voucher['Voucher']['description'];
$temp['slug'] = $voucher['Voucher']['slug'];
$temp['price'] = $this->data['Voucher']['price'];
$vouchers[] = $temp;
}
$this->Session->write('Res.Vouchers',$vouchers);
} else {
$vouchers = $this->Session->read('Res.Vouchers'); // read existing voucher orders
}
$this->set('voucher_orders', $vouchers);
}
下一个视图显示空白,我不知道如何测试控制器中的信息
<?php
/*
if voucher show
*/
if (isset($voucher)) {
?>
<div id="voucher_box" class="add_shadow column span-8">
<h3><?=$voucher['Voucher']['title'];?></h3>
<p>
<?=$voucher['Voucher']['description'];?>
</p>
<?php
echo $this->Form->create('Voucher',array('id'=>'ResVoucherForm','url'=>'/res/voucher'));
echo $this->Form->input('slug',array('type'=>'hidden','value'=>$voucher['Voucher']['slug']));
?>
<select id="VoucherPrice" name="data[Voucher][price]">
<? $prices = explode(',',$voucher['Voucher']['prices'])?>
<? foreach($prices as $price){?>
<option value="<?=$price?>">€ <?=$price?></option>
<? } ?>
</select>
<div class="submit"><input type="submit" id="check_rates" value="Purchase this" class="ui-button ui-widget ui-state-default ui-corner-all" /></div>
</form>
</div>
<?
}
// end if voucher show
?>
返回的Upadate错误############################################ ###########
注意(8):未定义索引:id [APP / controllers / res_controller.php,第739行]
注意(8):未定义的索引:title [APP / controllers / res_controller.php,第740行]
注意(8):未定义索引:说明[APP / controllers / res_controller.php,第741行]
注意(8):未定义的索引:slug [APP / controllers / res_controller.php,第742行]
阵 ( [0] =&gt;排列 ( [id] =&gt; [title] =&gt; [描述] =&gt; [slug] =&gt; [price] =&gt; 100 )
)
答案 0 :(得分:2)
在视图中,您可以在整个HTML中使用它:
if (isset($voucher)) {
// ...
}
含义:如果有凭证,则显示凭证信息,否则不显示任何内容。
现在,在您的控制器中,您似乎没有将voucher
变量传递给视图(应该使用$this->set('varname', $var)
;
因此,您的视图不会获取任何数据,因此它不会显示任何内容。
这可以解释您的问题。但如果屏幕完全空白(甚至不显示布局),则必须启用错误记录以检查发生了什么。
答案 1 :(得分:1)
您要将'voucher_orders'
设置为您的视图而不是'voucher'
视图中变量的名称始终是set方法中传递的字符串。另外,我不太明白你在控制器中使用$data
变量做了什么,它来自哪里?如果你已经检查了$this->data['Voucher'] = $data['Voucher']
是否已设置,那么$this->data
也是多余的,并且检查$data
。您可能会覆盖$this->data
数组,因为如果表单提交,视图已经为您提供了填充的$this->data
,那么您正在执行的操作是不必要的。
你应该尝试做一些教程并在跳入之前稍微阅读一下,你似乎没有正确理解CakePHP的结构和工作流程。
答案 2 :(得分:1)
感谢您的帮助。通过在控制器中使用pr()或debug()我发现了问题。它是在函数中被调用的行$ voucher = $ this-&gt; getVoucher($ slug);.我现在对cakephp有了更好的了解。