我想我遇到了类似的问题。我收到错误:
调用未定义的方法Slim \ Router :: setCacheFile()
我是从邮递员那里打电话的:
127.0.0.1:8080/php-slim/signup
我在post index.php中的post方法定义为:
试图从邮递员发送数据,并将其上传到localhost数据库,但似乎一旦它到达index.php,它就永远不会进入该功能。
期待您的帮助
这是index.php上的代码
<?php
ob_start("ob_gzhandler");
require 'C:\xampp\htdocs\php-slim\vendor\autoload.php';
require 'config.php';
require 'Slim/Slim.php';
\Slim\Slim::registerAutoloader();
$app = new \Slim\App();
$app->post("/signup", function() {
$request = \slim\Slim::getInstance()->request();
$data = json_decode($request->getBody());
$fname=$data->fname;
$lname=$data->lname;
$username=$data->username;
$password=$data->password;
try {
$db = getDB();
/*Inserting user values*/
$sql1="INSERT INTO users(username,password,fname,lname)VALUES(:username,:password,:fname,:lname)";
$stmt1 = $db->prepare($sql1);
$stmt1->bindParam("username", $username,PDO::PARAM_STR);
$stmt1->bindParam("password", $password,PDO::PARAM_STR);
$stmt1->bindParam("fname", $fname,PDO::PARAM_STR);
$stmt1->bindParam("lname", $lname,PDO::PARAM_STR);
$db = null;
if($userData){
$userData = json_encode($userData);
echo '{"userData": ' .$userData. '}';
} else {
echo '{"error":{"text":"Enter valid data"}}';
}
}
catch(PDOException $e) {
echo '{"error":{"text":'. $e->getMessage() .'}}';
}
});
$app->run();
有些不清楚为什么你会收到这个错误,看起来你没有包含/加载Slim依赖项。
我不知道您正在使用什么版本的Slim,但请确保您还加载了所有必需的软件包。您可以从https://packagist.org/packages/slim/slim获取特定版本的此信息。使用composer很好,因为它为你管理这个。
pimple/pimple: ^3.0 psr/http-message: ^1.0 nikic/fast-route: ^1.0 container-interop/container-interop: ^1.2 psr/container: ^1.0
一切就绪后,尝试将代码更改为:
// I believe you need this object to use the request method
use Psr\Http\Message\ServerRequestInterface as Request;
$app = new \Slim\App();
$app->post("/signup", function(Request $request) {
// not needed
// $request = \slim\Slim::getInstance()->request();
// no need to decode the request body, it's not json format
// $data = json_decode($request->getBody());
// do it this way instead. Will be array not object I believe
$data = $request->getParsedBody();
$fname = $data['fname'];
....
});