Представление CakePHP не будет отображаться - PullRequest
0 голосов
/ 19 сентября 2011

У меня есть форма заказа для покупки ваучера, но по какой-то причине теперь, когда я нажимаю на phurcase, он отображает пустой экран. Я не вижу, что изменилось и почему в представление не передается информация от контроллера.

Форма ваучера

        <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
            ?>

Возвращено сообщение об ошибке обновления ###########

Примечание (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] => Массив ( [id] => [title] => [описание] => [slug] => [цена] => 100 )

)

Ответы [ 3 ]

2 голосов
/ 19 сентября 2011

По-вашему, это все вокруг HTML:

if (isset($voucher)) {
    // ...
}

Значение: отображать информацию о ваучере, если есть ваучер, и не отображать ничего другого.

Теперь в вашем контроллере вы, кажется, не передаете переменную voucher в представление (что должно быть сделано с помощью $this->set('varname', $var);

Итак, ваше представление не получает никаких данных, поэтому ничего не отображает.

Это может объяснить вашу проблему. Но если экран полностью пустой (даже не отображается макет), необходимо включить ведение журнала ошибок, чтобы проверить, что происходит.

1 голос
/ 21 сентября 2011

Спасибо за вашу помощь. Используя pr () или debug () в контроллере, я обнаружил проблему. Это было в вызываемой функции в строке $ voucher = $ this-> getVoucher ($ slug) ;. Теперь я лучше разбираюсь в cakephp.

1 голос
/ 20 сентября 2011

Вы устанавливаете 'voucher_orders' для вашего представления, а не 'voucher' имя переменной в представлении всегда является строкой, переданной в методе set. Также я не совсем понимаю, что вы делаете в контроллере с переменной $data, откуда это взялось? Также это излишне делать $this->data['Voucher'] = $data['Voucher'] и проверять $this->data, если вы уже проверили, установлен ли $data. Возможно, вы перезаписываете свой массив $this->data, в том, что вы делаете, нет необходимости, поскольку представление уже дает вам заполненный $this->data, если это отправка формы.

Вы действительно должны попробовать сделать некоторые учебные пособия и немного почитать, прежде чем приступить, вы, похоже, неправильно понимаете структуру и рабочий процесс CakePHP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...