2016-07-29 3 views
1

Page_Controllerの拡張機能であるコントローラ(PromoCode_Controller)があります。私がアクションを起こすと、そのページが元のページにリダイレクトされるようにしたいと思います。私は現在、$this->redirectBack()がセットアップされているが、それは私がPage_Controllerが私の 'config.yml' ファイルに定義されている...Silverstripe: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; 
    } 

} 

DBからコードを削除するリンクがテンプレートにあります。リンクをクリックすると、$ codeID変数が空白ページに表示されますが、リダイレクトは実行されません。

私が間違っている場所を誰かが指摘することができますか?

+0

おそらく 'echo $ codeID;'はあなたのリダイレクトを防ぎます。ヘッダーは既に送信されているため。 – Darren

+0

@ダーレンは返信をありがとう。ただそこでそれを取り除いて、同じ問題に直面しています。 – 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

関連する問題