が付いたZendFrameworkコントローラーがありeditAction()
ます。
class WidgetController extends BaseController
{
public function editAction()
{
//code here
}
}
このコントローラーは、ユーザーがレコードを編集できるようにする前に、ユーザーがログインしているかどうかを確認するベースコントローラーを拡張します。
class BaseController extends Zend_Controller_Action
{
public function init()
{
if ($this->userNotLoggedIn()) {
return $this->_redirect('/auth/login');
}
}
}
ただし、AJAXリクエストを実行しているので、JSONレスポンスを送り返すため、リダイレクトは機能しなくなります。すぐに応答を送信できるように、コントローラーの実行を停止する必要があります。
class BaseController extends Zend_Controller_Action
{
public function init()
{
if ($this->userNotLoggedIn()) {
if ($this->_request->isXmlHttpRequest()) {
$jsonData = Zend_Json::encode(array('error'=>'You are not logged in!'));
$this->getResponse()
->setHttpResponseCode(401)
->setBody($jsonData)
->setHeader('Content-Type', 'text/json');
//now stop controller execution so that the WidgetController does not continue
} else {
return $this->_redirect('/auth/login');
}
}
}
}
コントローラの実行を停止するにはどうすればよいですか?