El servicio Slim Framework Rest recibe dos resultados

Estoy haciendo un servicio REST con php usando Slim Framework. todo funciona, pero hay algo raro. Siempre obtengo datos dobles o triples. Aquí está mi index.php:

setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(PDOException $e) { echo 'ERROR: ' . $e->getMessage(); } return $conn; } $app->get('/problem/find/:id/','getProblem'); // Using Get HTTP Method and process getUser function $app->get('/problem/find-all/','getProblems'); // Using Get HTTP Method and process getUsers function $app->post('/problem/add/', 'addProblem'); // Using Post HTTP Method and process addUser function $app->delete('/problem/delete/:id','deleteProblem'); // Using Delete HTTP Method and process deleteUser function $app->run(); function getProblems() { $sql_query = "select * FROM problems ORDER BY Station"; try { $dbCon = getConnection(); $stmt = $dbCon->query($sql_query); $problems = $stmt->fetchAll(PDO::FETCH_OBJ); $dbCon = null; echo '{"probfems": ' . json_encode($problems) . '}'; } catch(PDOException $e) { echo '{"error":{"text":'. $e->getMessage() .'}}'; } } function getProblem($id) { $sql = "SELECT * FROM problems WHERE idproblems=:id"; try { $dbCon = getConnection(); $stmt = $dbCon->prepare($sql); $stmt->bindParam("id", $id); $stmt->execute(); $problem = $stmt->fetchObject(); $dbCon = null; echo json_encode($problem); } catch(PDOException $e) { echo '{"error":{"text":'. $e->getMessage() .'}}'; } } function addProblem() { global $app; $postdata = file_get_contents("php://input"); echo $postdata; $req = json_decode($postdata);; // Getting parameter with names $paramName = $req->station; // Getting parameter with names $paramAdres = $req->address; // Getting parameter with names $paramCity = $req->city;// Getting parameter with names $parampostal = $req->postalcode; $parampic = $req->pictureOfDamage; $paramdescrip= $req->description; $sql = "INSERT INTO problems (Station,Address,Postalcode,City,PictureOfDamage,Description) VALUES (:station,:address,:postalcode,:city,:pictureOfDamage,:description)"; try { $dbCon = getConnection(); $stmt = $dbCon->prepare($sql); $stmt->bindParam(':station', $paramName); $stmt->bindParam(':address', $paramAdres); $stmt->bindParam(':city', $paramCity); $stmt->bindParam(':postalcode', $parampostal); $stmt->bindParam(':pictureOfDamage', $parampic); $stmt->bindParam(':description', $paramdescrip); $stmt->execute(); $dbCon = null; echo json_encode("toegevoegd "); } catch(PDOException $e) { echo '{"error":{"text":'. $e->getMessage() .'}}'; } } function deleteProblem($id) { $sql = "DELETE FROM problems WHERE idproblems=:id"; try { $dbCon = getConnection(); $stmt = $dbCon->prepare($sql); $stmt->bindParam("id", $id); $stmt->execute(); $dbCon = null; } catch(PDOException $e) { echo '{"error":{"text":'. $e->getMessage() .'}}'; } } $app->run(); 

No importa qué método elija como / find-all da como resultado (la base de datos está actualmente vacía):

 {"problems": []}{"problems": []}{"problems": []} 

Y si preformé una POST, la agrega dos veces a la base de datos. Para hacerlo aún más extraño, recibo el error doble 404 cuando ingreso la URL incorrecta. error 404

Como último este es mi archivo .htaccess

  RewriteEngine On RewriteBase /Dats24/ RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [QSA,L] Header always set Access-Control-Allow-Origin "*" Header always set Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS" Header always set Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Access-Control-Allow-Origin" 

los métodos no se invocan más de una vez que lo revisé. Realmente no sé cuál podría ser el problema. Gracias de antemano por la ayuda 🙂

Eso es porque tienes múltiples líneas con:

  $app->run(); 

Cada uno ejecuta la lógica completa de su aplicación y proporciona la salida completa.

El método Run debe ejecutarse siempre solo una vez, después de configurar rutas, middleware, etc.

Por extraño que parezca, no puedo encontrar esta información (ni nada sobre el método de ejecución de la clase Slim) en documentos delgados …

La función siempre debe devolver algo. También me he enfrentado a tal situación. Pero lo resolví. En cualquier función sin eco deberías intentar regresar. Seguro que funcionará mejor.