我正在使用slim框架用php创建一个REST服务。一切正常,但有点奇怪。我总是得到两倍或三倍的数据。这是我的索引。php:
<?php
require 'Slim/Slim.php';
\Slim\Slim::registerAutoloader();
$app = new \Slim\Slim();
if($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
header( "HTTP/1.1 200 OK" );
exit();
}
function getConnection() {
try {
$db_username = "root";
$db_password="admin";
$conn = new PDO('mysql:host=localhost;dbname=dats24', $db_username);
$conn->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();
无论我选择哪个方法,比如/find all,都会将其作为输出(数据库当前为空):
{"problems": []}{"problems": []}{"problems": []}
最后这是我的. 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"
在我检查该方法时,该方法的调用次数没有超过一次。我真的不知道是什么问题。提前感谢您的帮助:)
函数总是应该返回一些东西。我也遇到过这样的情况。但我解决了。在任何没有echo的函数中,都应该尝试返回。当然它会起到最好的作用。
这是因为你有多行:
$app->run();
每一个都执行应用程序的整个逻辑,并提供整个输出。
在配置路由、中间件等之后,Run方法应该始终只执行一次。
奇怪的是,我在Slim文档中找不到这个信息(或者任何关于Slim类的run方法的信息)。。。
在slim框架中: 我们可以访问: http://localhost:8080/hello/bob 请问如何在slim获得query参数呢,比如访问: 搜索无结果。
我一直试图找到一个解决方案,在我的angular应用程序上启用cors,该应用程序由一个带有Slim API框架的PHP提供服务。
问题:基于PersonDto中存在的规则值,我正在应用这些规则。在Rule1类中,我有一个修改id字段的逻辑。我正在设置新的id,我得到作为参数。 最后,我将结果存储到ArrayList中。 但是在ArrayList中,所有PersonDto的值都是我在应用规则时传递的最后一个id值。 例如: 正如您在上面的代码片段中所看到的,有两个ID10001和10002,但是当存储并打印结果时,所有元素中的
我一直试图为我编写的基于Spring MVC的Rest服务找到一个简单的通用单元测试框架。 我一直在网上搜索,并将其缩小到: RESTFUSE(http://developer.eclipsesource.com/restfuse/) 放心(https://github.com/jayway/rest-asured) MockMVC(http://www.petrikainulainen.net/
问题内容: 在服务器端使用这些基于Python的不同REST框架的建议列表中是否可以编写自己的RESTful API?最好有优点和缺点。 请随时在此处添加建议。 问题答案: 设计时要注意的一点是GET和POST的合并,就好像它们是同一件事一样。使用Django的基于函数的视图和的默认调度程序很容易犯此错误,尽管这两个框架现在都提供了解决此问题的方法(分别基于类的视图和)。 HTTP动词在REST
我需要在RESTFul API中公开我的业务逻辑。我的一位同事提到Dropwizard似乎很好。但是我想知道它是否适合我的要求。我的要求是调用多个SOAP服务和REST API来构建应用程序逻辑。 dropwizard对消费soap服务/rest API有什么原生支持吗?或者我应该和Spring,CXF之类的其他框架集成?如果我使用CXF或Spring,我知道我将需要生成JAXB注释类、服务end