2011-09-19 60 views
0

我有一張訂單來取代優惠券,但由於某種原因,現在當我點擊phurcase時,它會顯示一個空白屏幕。我不能看到什麼改變了,爲什麼視圖沒有被傳遞來自控制器的信息。cakephp視圖將不會顯示

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 /控制器/ res_controller.php,線739]

通知(8):未定義指數:標題[APP /控制器/ res_controller.php,線740]

通知(8):未定義指數:描述[APP /控制器/ res_controller.php,線741]

通知(8):未定義指數:蛞蝓[APP /控制器/ res_controller.php,線742]

Array ( [0] => Array ( [ID] => [標題] => [描述] => [蛞蝓] => [價格] => 100 )

+1

您是否啓用了調試功能?如果沒有在core.php中將debug設置爲2並檢查錯誤輸出。您也可以使用pr()或debug()函數(如pr($ this-> data))在您的控制器中輸出,例如 – 8vius

+0

感謝您的幫助,我非常不確定測試控制器中的數據。我在$ this-> set('voucher_orders',$ vouchers)下完成了一個pr($ vouchers)。我發佈了這個錯誤,我沒有看到有什麼不對,因爲它之前很好。 –

回答

1

感謝您的幫助。通過在控制器中使用pr()或debug(),我發現了這個問題。它在函數中被調用$ voucher = $ this-> getVoucher($ slug);.我現在對cakephp有了更好的理解。

2

在視圖中,你必須這種圍繞整個HTML:

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

含義:顯示憑證信息,如果有一個憑證,不以其他方式顯示任何內容。

現在,在你的控制器,你似乎沒有被傳遞voucher變量視圖(這應該與$this->set('varname', $var)進行;

所以,你的觀點沒有得到任何數據,因此不顯示任何內容。

這可以解釋您的問題。但是,如果屏幕是完全空白的(甚至沒有佈局顯示器),則必須啓用錯誤日誌記錄,以檢查發生了什麼事情。

+0

我確實有$ this-> set('voucher_orders',$ vouchers);控制器中的 是你的意思?謝謝 –

+0

你的方式,視圖上的變量名將是'$ voucher_orders',而不是'$ voucher'。 – bfavaretto

1

要設置'voucher_orders'到您的查看不是'voucher'變量的名稱在視圖中總是在set方法中傳遞的字符串。我也不太明白你在變量控制器中做什麼,它來自哪裏?如果您已經檢查是否設置了$data,則它也是冗餘的,如果$this->data['Voucher'] = $data['Voucher']和檢查$this->data isset。您可能會覆蓋您的$this->data陣列,您所做的並不是必需的,因爲如果視圖已提交表單,該視圖已經爲您提供了填充$this->data

你應該真的嘗試做一些教程並在跳入之前閱讀一些內容,但似乎沒有正確理解CakePHP的結構和工作流。

+0

我有這個爲我開發的應用程序。我有一個PHP的限制知識,並沒有在cakephp中。我在尋找的是開發人員通過代碼,因爲我可以看到它的結構不正確。它確實適用於一些小問題,但由於資金限制而迅速發展。如果有人知道一個好的cakephp公司,我會感興趣。 –

+0

當我做一個pr($ voucher_orders);在控制器的末尾,我得到Array([0] => Array([id] => [title] => [description] => [slug] => [price] => 100)[1] => Array ([id] => [title] => [description] => [slug] => [price] => 50))以及未定義的臨時索引。 –

+0

因爲在控制器中$ voucher_orders不存在,所以存在$ vouchers – 8vius