2016-07-29 115 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