2016-05-31 12 views
4

私のプロジェクトでは、AjaxControllerを作成しました。このAjaxControllerはajaxリクエストを操作しました。 ajaxで使用されているURLに入力する404エラーが表示されるようにしたいと思います。 AjaxController.phpで 私が持っている:PhalconPHP - リダイレクトin initialize()

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

(もちろん私はshow404ActionとのErrorControllerを持っている)

それは動作しません。ブラウザでexample.com/ajaxに入力すると、AjaxControllerのIndexActionからコンテンツが取得されます。それを修復するには?

+0

おそらく、これにはミドルウェアを使用できますか? –

答えて

3

beforeExecuteRoute()で同じことをしてみてください(SEOの目的のために、再び)の取り扱い正しいヘッダを示しています。 Phalconのinitialize()は、その名前が示すように、物事を初期化するように設計されています。ディスパッチャを使用してそこにディスパッチできますが、リダイレクトしないでください。

文書番号hereを確認することができます。列 "は動作を停止できますか?"要求を完了するために応答オブジェクトを返すことができる場合はfalseと評価し、他のメソッドへの評価を停止し、ビューをコンパイルします。

事を知って大切なことは、アクションが呼び出される前に毎回実行されるbeforeExecuteRoute()です。そのため、あなたがあなたのアクション間で転送している場合に備えて、数回起動するかもしれません。

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

ユーザーをDispatcher経由で404ページに転送することをお勧めします。このようにURLは残り、SEOルールに従ってすべてを行います。

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

また、リダイレクトを初期化することはお勧めできません。 Phalconの詳細情報:https://forum.phalconphp.com/discussion/3216/redirect-initialize-beforeexecuteroute-redirect-to-initalize-and

誰かが必要とする場合に私の404メソッドを追加する。それは

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

私は警告を受けた - 前方は無効関数です。 – Robin71

+0

私の悪い。上記の私の答えを更新しました。コードをコピーしてリターンを削除するのを忘れました。申し訳ありません:) –

+0

Ok、警告が消えましたが、私はまだIndexActionからコンテンツを取得します。 404ページへの転送はありません:( – Robin71

関連する問題