Ich entwickle derzeit eine RESTful-API, um eine Reihe von Datenbanken zu verwalten. Idealerweise sollte ich in der Lage sein, meine APIs Routen von einer anderen Route innerhalb meiner Anwendung aufzurufen, richtig?In einer Slim-API können keine vorhandenen internen Routen aufgerufen werden.
Ich habe versucht, subRequest
zu verwenden, um eine bestehende Route vergebens aufzurufen. Alles, was ich bekommen, ist die folgende, während meine Route in Postman Ausführung:
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
<title>Slim Application Error</title>
<style>body{margin:0;padding:30px;font:12px/1.5 Helvetica,Arial,Verdana,sans-serif;}h1{margin:0;font-size:48px;font-weight:normal;line-height:48px;}strong{display:inline-block;width:65px;}</style>
</head>
<body>
<h1>Slim Application Error</h1>
<p>A website error has occurred. Sorry for the temporary inconvenience.</p>
</body>
</html>
Hier sind meine companies.php
API Routen alle Unternehmen in einem Tisch zu bekommen und ein neues Unternehmen in den companies
Tisch zu legen.
<?php
use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;
// Get all companies
$app->get('/companies', function(Request $request, Response $response) {
$sql = "SELECT * FROM companies";
try {
// Get DB Object
$db = new db();
// Connect
$db = $db->connect();
$stmt = $db->query($sql);
$companies = $stmt->fetchAll(PDO::FETCH_OBJ);
$db = null;
echo '{"data":' . json_encode($companies) . '}';
} catch(PDOException $e) {
echo '{"error": { "text":' . $e->getMessage() . '}}';
}
});
// Add new company to companies table
$app->put('/new/company/{companyName}', function(Request $request, Response $response) {
$newCompany = $request->getAttribute('companyName');
$insert_sql = "INSERT INTO companies (company_name) VALUE (:newCompany)";
try {
$db = new db();
$db = $db->connect();
$insert_stmt = $db->prepare($insert_sql);
$newCompany = str_replace("'", "", $newCompany);
$insert_stmt->bindParam(':newCompany', $newCompany);
$insert_stmt->execute();
$newID = $db->lastInsertId();
$db = null;
echo '{"notice": {"text": "New Company Added (cid: '.$newID.')"}';
} catch(PDOException $e) {
echo '{"error": { "text":' . $e->getMessage() . '}}';
}
});
Innerhalb einer anderen Route, sites.php
, würde Ich mag den PUT->'/new/company'
Weg laufen. Also, irgendwo innerhalb sites.php
stelle ich folgende:
$destinationComp = "myNewCompany";
$res = $this->subRequest('PUT', '/new/company/' . $destinationComp);
echo $res;
Ich würde erwarten, meine Ausgabe gleich zu sein, als ob ich eine PUT-Anforderung manuell von Postman gemacht, anstelle des Fehlers in dem ersten Code-Abschnitt aufgeführt.
Außerdem habe ich versucht, meine Strecke Anruf zu modifizieren use ($app)
in der Hoffnung, machen eine regelmäßige Anforderung durch die $app
Variable eher umfassen als $this
, ist Fall $this
nicht funktioniert. Welche aussah:
Nur um die gleiche Fehlermeldung in Postman bei der Ausführung zu erhalten.
Irgendwelche Vorschläge?
Vielen Dank für den Fang. Offenbar, dass die einzige Permutation meines Setup habe ich nicht versucht, gutes Auge! –
Ich habe seitdem Änderungen an meiner 'Firmen' API vorgenommen, so dass es Parameter verwendet, so dass die Erstellung einer neuen Firma eine PUT Anfrage an '/ company? Name = companyName' ist, es scheint, dass Ihre Empfehlung nicht mehr funktioniert. Ich kann auch keine Beispiele für subRequests finden, die irgendwo Parameter verwenden. –
Sie sollten eine weitere Frage zum Stapelüberlauf stellen und Ihr Problem skizzieren. – Scriptonomy