CakePHP 3.0: Antwort als json
Ich bin erstellen einer CakePHP 3.0-REST-API. Ich folgte diese Anweisungen (Arbeitsplan im Buch) und erhielt Antwort im json-Format. Hier ist mein code.
01 src/config/rout.php
Router::extensions('json');
02 src/controler/UsersController.php
public function view($id = null) {
$data = array('status' => 'o','status_message' => 'ok' );
$this->set('data', $data);
$this->set('_serialize', 'data');
}
03 senden einer post-Anfrage an diese URL
Ausgabe:
{
"status": "o",
"status_message": "ok"
}
Aber ich möchte json-out put ohne .json Erweiterung. vielen Dank im Voraus.
- Versuchen
Router::parseExtensions('json');
stattRouter::extensions('json');
? - Aber, 3-0-migration-guide sagt Router::parseExtensions() wurde entfernt. Verwenden Sie Kuchen\Routing\Router::extensions() statt. Diese Methode muss aufgerufen werden, bevor Routen verbunden sind. Es wird sich nicht ändern bestehender Routen.
- Jeder Weg, ich möchte nicht hinzufügen-Erweiterung für meine URL. Ich möchte heraus stellen JSON-Antwort ohne .json-Erweiterung.
- Sie müssen die header übergeben wie
Accept: application/json
und erhalten Sie die Ausgabe als json-format.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hatte ich die gleiche situation, aber jetzt fand ich die Lösung für dieses. Jetzt kann ich put-Anfrage-url ohne .json und Json-Daten in der Antwort als gut.
In App controller-Netzwerk hinzufügen-Antwort, die behandeln Ihre Reaktion.
verwenden, Kuchen\Network\Antwort;
Nach, dass Sie brauchen, um konvertieren von Json-Eingabe in array, Also setzen Sie diese
getJsonInput()
Funktion in IhremAppController
und nennen es ininitialize()
Nun in Ihrer Steuerung haben Sie alle post-Daten in
$this->data
. so können Sie auf alle Eingänge.Hier ist ein Beispiel :
Nun am Ende Ihrer Funktion, die Sie aufrufen müssen
respond()
definiert istAppController
Definieren Sie alle Variablen in der
AppController
alsEinem mehr was zu tun ist:
In der
Response.php (/vendor/cakephp/cakephp/src/Network/Response.php)
Sie Bearbeiten müssen, um eine Zeile 586
echo $content;
zuecho json_encode($content);
im_sendContent()
Funktion.Das ist es. Nun kann der request-url als
domain_name/project_name/users/index
.$this->response->type('json');
war der trick, danke!Falls jemand noch auf der Suche nach einfachen json-response-Lösung ist hier auf die schnelle :
fügen Sie diese Methode, um Ihre AppController.php
und Sie können es verwenden, in jeder Handlung, so einfach ist das
und ein weiteres Beispiel
hoffe, das hilft 🙂
Anfrage, Ihre Daten mit einer richtigen HTTP-accept-header
Accept: application/json
, den RequestHandler sollte ihn dann abzuholen.