CakePHP 3 - obiekt Response
W tym artykule przyjrzymy się bliżej obiektowi Response w CakePHP. Cake\Http\Response to domyślna klasa odpowiedzi w CakePHP. Hermetyzuje szereg funkcjonalności do generowania odpowiedzi HTTP w aplikacji. Response zapewnia interfejs do wykonywania zadań związanych z odpowiedziami, takich jak: wysyłanie nagłówków do przekierowań, wysyłanie nagłówków typów zawartości, wysyłanie dowolnego nagłówka, wysyłanie treści odpowiedzi.
Obsługa typów zawartości
Można kontrolować Content-Type odpowiedzi aplikacji za pomocą metody withType(). Jeśli Twoja aplikacja musi radzić sobie z typami treści, które nie są wbudowane w Response, możesz je również zamapować za pomocą type():
// dodanie typu v-card
$this->response->type(['vcf' => 'text/v-card']);
// Ustawienie Content-Type na v-card.
$this->response = $this->response->withType('vcf');
Zwykle będziesz chciał mapować dodatkowe typy zawartości w wywołaniu zwrotnym beforeFilter() kontrolera,
aby móc korzystać z funkcji automatycznego przełączania widoku elementu RequestHandlerComponent, jeśli jest używany w aplikacji.
Jeśli chcesz wysłać plik jako odpowiedź do przeglądarki możesz to zrobić w następujący sposób (używając funkcji withFile).
public function sendFile($id)
{
$file = $this->Attachments->getFile($id);
$response = $this->response->withFile($file['path']);
return $response;
}
Jeśli chcesz, możesz również wymusić pobranie pliku zamiast wyświetlania go w przeglądarce, określając opcje.
$response = $this->response->withFile(
$file['path'],
['download' => true, 'name' => 'lorem_ipsum']
);
Można również wysłać ciąg znaków jako plik. Spójrz na przykład.
public function sendIcs()
{
$icsString = $this->Calendars->generateIcs();
$response = $this->response;
$response = $response->withStringBody($icsString);
$response = $response->withType('ics');
$response = $response->withDownload('filename_for_download.ics');
return $response;
}
Ustawienie nagłówków
Ustawianie nagłówków odbywa się za pomocą metody withHeader().
$response = $response->withHeader('X-Extra', 'My header');
// Ustawienie wiele nagłówków
$response = $response->withHeader('X-Extra', 'My header')->withHeader('Location', 'http://example.com');
// dodanie wartości do istniejącego nagłówka
$response = $response->withAddedHeader('Set-Cookie', 'remember_me=1');
Nagłówki nie są wysyłane, gdy są ustawione. Zamiast tego są one wstrzymane do momentu wyemitowania odpowiedzi
przez Cake\Http\Server.
Aby ustawić ciąg znaków jako treść odpowiedzi należy użyć poniższego kodu.
$response = $response->withStringBody('My Body');
// odpowiedź json
$response = $response->withType('application/json')->withStringBody(json_encode(['Foo' => 'bar']));
Więcej na temat obiektu Response można znaleźć
w dokumentacji.
