2016-07-29 50 views
1

我有一個控制器(PromoCode_Controller),它是Page_Controller的擴展。當我發起一個動作時,我希望頁面重定向到它所來自的頁面。我現在有$this->redirectBack()成立,但它不費一槍......Silverstripe:頁面控制器重定向返回不工作

我在「config.yml」文件中定義的Page_Controller:

Page_Controller: 
    extensions: 
    - PromoCode_Controller 

控制器看起來就像這樣:

<?php 

class PromoCode_Controller extends Extension { 
    private static $allowed_actions = array(
     'DisplayCodes', 
     'DeleteCode' 
    ); 

    public function DisplayCodes() { 
     //Display users promo codes 
     $arrayList = ArrayList::create(); 
     $codes = PromoCode::get()->filter(array(
      "OwnerID" => Member::currentUserID(), 
     )); 

     foreach($codes as $code) { 
      $arrayList->push($code); 
     } 
     return $arrayList; 

    } 

    public function DeleteCode() { 
     $codeID = $this->owner->request->param("ID"); 
     //if($codeID && $code = PromoCode::get()->byID($codeID)) { 
     // $code->delete(); 
     //} 
     echo $codeID; 
     $this->redirectBack(); 
     return $this; 
    } 

} 

我的模板中有一個鏈接,用於從數據庫中刪除代碼。當我點擊鏈接時,它會在空白頁面上打印$ codeID變量,但它不會觸發重定向。

有人可以幫助指出我要去哪裏錯了嗎?

+0

可能是'echo $ codeID;'防止您的重定向。由於標題已經發送。 – Darren

+0

@Darren謝謝你的回覆。剛剛刪除它,仍然面臨同樣的問題。 – Dallby

回答

1

所以我設法偶然發現了這個問題。以下是完整的代碼:

public function DeleteCode() { 
     $codeID = $this->owner->request->param("ID"); 
     if($codeID && $code = PromoCode::get()->byID($codeID)) { 
      $code->delete(); 
     } 

     return $this->owner->redirectBack(); 
    } 
+1

是的,你必須返回'redirectBack'的響應。你不能做'redirectBack',然後像你在你的問題中做的那樣返回其他東西。 – bummzack

相關問題