2016-07-29 13 views
1

Ich habe einen Controller (PromoCode_Controller), der eine Erweiterung von PageController ist. Wenn ich eine Aktion abfange, möchte ich, dass die Seite zurück zu der Seite umgeleitet wird, von der sie stammt. Ich habe derzeit $this->redirectBack() eingerichtet, aber es wird nicht gefeuert ...Silverstripe: Seite Controller Redirect Zurück funktioniert nicht

Ich habe den Page_Controller in meiner 'config.yml' Datei definiert:

Page_Controller: 
    extensions: 
    - PromoCode_Controller 

Der Controller sieht aus, als solche:

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

} 

Ich habe einen Link in meiner Vorlage, um den Code aus der DB zu löschen. Wenn ich auf den Link klicke, wird die Variable $ codeID auf einer leeren weißen Seite ausgegeben, aber die Weiterleitung wird nicht ausgelöst.

Kann jemand aufzeigen, wo ich falsch liege?

+0

Wahrscheinlich die 'echo $ codeID;' verhindert Ihre Weiterleitung. Da Header bereits gesendet werden. – Darren

+0

@Darren danke für die Antwort. Ich habe es einfach dort entfernt und sehe immer noch das gleiche Problem. – Dallby

Antwort

1

So gelang es mir zufällig auf die Reparatur zu stolpern. Hier ist der vollständige Code:

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

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

Ja, Sie müssen die Antwort von 'redirectBack' zurückgeben. Sie können 'redirectBack' nicht ausführen und dann etwas anderes zurückgeben, als Sie es in Ihrer Frage getan haben. – bummzack

Verwandte Themen