カスタム フレームワークがあり、リクエストファイルでリクエストがajaxかどうかを検出します。ベースコントローラーで、ユーザーがログインしているかどうかを確認します。
If user is not logged in:
1. if request is ajax - force JS redirect from PHP (unable to do)
2. if request is not ajax - PHP redirect (header, works)
私はナンバー1を働かせることができません。
これが私のリダイレクトコードです:
//User::Redirect
public function redirect($url = SITE_URL, $isAjax = false) {
if ($isAjax === true) {
//its ajax call, echo js redirect
echo '<script>window.location = ' . $url . ';</script>';
} else {
header("Location: {$url}");
}
exit;
}
ログインチェックのコード:
//Basecontroller::__construct
if ( ! $this->user->isLoggedIn()) {
//redirect to login page
$this->user->redirect('/login', $request->ajax());
exit;
}
しかし、 ajax呼び出しでリダイレクトする代わりに、出力するだけです<script>window.location = URL</script>
ノート:
そこからリダイレクトを行うためにAJAX呼び出しのそれぞれにチェックを追加できることはわかっていますが、それを避けて、すべてのAJAX呼び出しにチェックを追加するのではなく、PHPスクリプトがベースコントローラーで検出してリダイレクトできるようにします(たくさん)。