Se você está trabalhando com o CakePHP e construindo um aplicativo de página única (SPA), API REST ou apenas uma solicitação ajax – há casos em que você precisa responder ao cliente que a solicitação foi rejeitada (falha na autenticação, nenhuma ação desse tipo & etc) . Com solicitações regulares, é simples assim:
if (...) {
throw new NotFoundException('Could not find that post');
}
ou apenas use a função setFlash da Sessão. Mas e as chamadas de Ajax? Você deseja responder como código de status HTTP com mensagem? Dessa forma não funcionará. Você precisa definir responder como json, código de status e interromper o aplicativo inteiro:
if( ... ) {
if($this->request->is('ajax')) {
$this->response->type('json');
$this->response->statusCode(400);
$this->response->body(json_encode(
array('status' => 'ERROR', 'message' => 'Bad Request')));
$this->response->send();
$this->_stop();
}
}
A última linha é opcional:
$this->_stop();
Isso interromperá o aplicativo inteiro. Em alguns casos, você precisa, por exemplo, acesso não autorizado:
public function isAuthorized($user) {
if( ... ) {
// Auth fails
if($this->request->is('ajax')) {
$this->response->type('json');
$this->response->statusCode(401);
$this->response->body(json_encode(
array('status' => 'ERROR', 'message' => 'Unauthorized')));
$this->response->send();
$this->_stop();
}
}
}
mas pode haver casos em que você deseja processar seu aplicativo ainda mais sem interrompê-lo.