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.