Ich habe diesen einfachen REST-API, getan in Schlank,Slim - So senden Sie eine Antwort mit dem Header "Content-Type: application/json"?
<?php
require '../vendor/autoload.php';
function getDB()
{
$dsn = 'sqlite:/home/branchito/personal-projects/slim3-REST/database.sqlite3';
$options = array(
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
);
try {
$dbh = new PDO($dsn);
foreach ($options as $k => $v)
$dbh->setAttribute($k, $v);
return $dbh;
}
catch (PDOException $e) {
$error = $e->getMessage();
}
}
$app = new \Slim\App();
$app->get('/', function($request, $response) {
$response->write('Bienvenidos a Slim 3 API');
return $response;
});
$app->get('/getScore/{id:\d+}', function($request, $response, $args) {
try {
$db = getDB();
$stmt = $db->prepare("SELECT * FROM students
WHERE student_id = :id
");
$stmt->bindParam(':id', $args['id'], PDO::PARAM_INT);
$stmt->execute();
$student = $stmt->fetch(PDO::FETCH_OBJ);
if($student) {
$response->withHeader('Content-Type', 'application/json');
$response->write(json_encode($student));
} else { throw new PDOException('No records found');}
} catch (PDOException $e) {
$response->withStatus(404);
$err = '{"error": {"text": "'.$e->getMessage().'"}}';
$response->write($err);
}
return $response;
});
$app->run();
ich aber nicht Browser mir Typen application/json
Inhalt senden bekommen können, es sendet immer text/html
? Was mache ich falsch?
EDIT:
Ok, nach zwei Stunden den Kopf gegen die Wand schlagen, ich auf diese Antwort gestolpert:
https://github.com/slimphp/Slim/issues/1535 (am unteren Rand einer Seite) , die erklärt, was passiert, erscheint, dass response
Objekt ist unveränderlich und als solche muss es zurückgegeben oder neu zugewiesen werden, wenn Sie es nach while zurückgeben möchten.
Haben Sie den HTTP-Antwort-Header "Content-Type" vor dem Senden der Antwort festgelegt? – Rao
..wie Sie sehen können in meinem Code '$ response-> withHeader ('Content-Type', 'application/json');' – branquito
Sollte 'return' nicht' echo' sein? – Darren