cakephp视图不会显示

时间:2011-09-19 19:12:56

标签: cakephp

我有一张订单来购买凭证,但出于某种原因,现在当我点击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?>">&euro; <?=$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?>">&euro; <?=$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         )

3 个答案:

答案 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有了更好的了解。