无法在 slim index.php 上进入注册方法
Not able to go into signup method on slim index.php
我想我 运行 遇到了类似的问题。我收到错误:
Call to undefined method Slim\Router::setCacheFile()
我是从邮递员那里打电话的:
127.0.0.1:8080/php-slim/signup
我在 slim index.php 中的 post 方法定义为:
尝试从 postman 发送数据,并将其上传到本地主机数据库,但似乎一旦到达 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();
不太清楚您为什么会收到该错误,看起来您不是 including/loading 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'];
....
});
我想我 运行 遇到了类似的问题。我收到错误:
Call to undefined method Slim\Router::setCacheFile()
我是从邮递员那里打电话的:
127.0.0.1:8080/php-slim/signup
我在 slim index.php 中的 post 方法定义为:
尝试从 postman 发送数据,并将其上传到本地主机数据库,但似乎一旦到达 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();
不太清楚您为什么会收到该错误,看起来您不是 including/loading 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'];
....
});