2016-05-31 14 views
4

In meinem Projekt habe ich AjaxController erstellt, der Ajax-Anfragen bedient. Ich möchte Benutzer, die URL von Ajax eingeben 404 404 Fehler eingeben. In AjaxController.php ich habe:PhalconPHP - Umleitung in Initialisierung()

public function initialize() { 
    if (!$this->request->isAjax()) { 
     return $this->response->redirect('error/show404'); 
    } 
} 

It (Natürlich habe ich mit Errorcontroller show404Action haben) funktioniert nicht. Wenn ich im Browser zu example.com/ajax gehe, erhalte ich Inhalt von IndexAction in AjaxController. Wie man es repariert?

+0

Vielleicht könnten Sie eine Middleware dafür verwenden? –

Antwort

3

Bitte versuchen, das gleiche in beforeExecuteRoute() zu tun. Phalcon initialize() ist, wie der Name schon sagt, dazu gedacht, Dinge zu initialisieren. Sie können dort mit Dispatcher versenden, sollten aber nicht umleiten.

Sie können einen Teil der Dokumentation here überprüfen. Spalte "kann den Betrieb stoppen?" sagt, ob es möglich ist, das Antwortobjekt zur Vervollständigung der Anfrage zurückzugeben oder false zu stoppen, um andere Methoden auszuwerten und die Ansicht zu kompilieren.

Eine wertvolle Sache zu wissen ist, dass beforeExecuteRoute() jedes Mal ausgeführt wird, bevor Aktion aufgerufen wird, so kann einige Male Feuer für den Fall, dass Sie zwischen Ihren Aktionen weiterleiten.

public function beforeExecuteRoute(Event $event, Dispatcher $dispatcher) 
{ 
    if (!$this->request->isAjax()) { 
     return $this->response->redirect('error/show404'); 
    } 
} 
0

Ich würde empfehlen, Benutzer 404-Seite über Dispatcher weiterleiten. Auf diese Weise bleibt die URL bestehen und Sie werden alles gemäß den SEO-Regeln tun.

public function initialize() { 
    if (!$this->request->isAjax()) { 
     $this->dispatcher->forward(['controller' => 'error', 'action' => 'show404']); 
    } 
} 

Es ist auch keine gute Idee, Weiterleitungen initialisieren. Weitere Informationen von Phalcon hier: https://forum.phalconphp.com/discussion/3216/redirect-initialize-beforeexecuteroute-redirect-to-initalize-and

Hinzufügen meiner 404-Methode, falls jemand es braucht. Es zeigt richtige Header Handling (wieder für SEO Zwecke)

// 404 
public function error404Action() 
{ 
    $this->response->setStatusCode(404, 'Not Found'); 
    $this->view->pick(['templates/error-404']); 
    $this->response->send(); 
} 
+0

Ich habe eine Warnung erhalten - Vorwärts ist Void-Funktion. – Robin71

+0

Mein schlechtes. Meine Antwort oben wurde aktualisiert. Kopieren Sie Ihren Code und vergessen Sie die Rückgabe zu entfernen. Sorry :) –

+0

Ok, Warnung ist verschwunden, aber ich bekomme immer noch Inhalt von IndexAction. Es gibt keine Weiterleitung zu 404-Seite :( – Robin71