PHP7中的Delete方法未接收参数
我们正在编写一个Restful API,以便从ionic应用程序调用。我们从angular service发送此代码:PHP7中的Delete方法未接收参数,php,angularjs,rest,ionic-framework,Php,Angularjs,Rest,Ionic Framework,我们正在编写一个Restful API,以便从ionic应用程序调用。我们从angular service发送此代码: .service('ServiceName', function($http) { return { borrarAlumno: function(par) { var link = "http://localhost/ws/index.php"; return $htt
.service('ServiceName', function($http) {
return {
borrarAlumno: function(par) {
var link = "http://localhost/ws/index.php";
return $http.delete(link, {
id: par.id
})
}
}
})
当我们试图从php中读取id参数时,我们什么也得不到。这是我们正在使用的代码:
if (isset($_SERVER['HTTP_ORIGIN'])) {
header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Max-Age: 86400'); // cache for 1 day
}
// Access-Control headers are received during OPTIONS requests
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))
header("Access-Control-Allow-Methods: GET, POST, DELETE, PUT, OPTIONS");
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
header("Access-Control-Allow-Headers:{$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");
exit(0);
}
$input = file_get_contents('php://input');
print_r($_SERVER['REQUEST_METHOD']);
exit();
我们已经尝试过使用类似的代码来使用PUT、get和POST方法来获取参数,并且成功了
任何帮助都将不胜感激
编辑:
此php称为另一个php:
class AlumnosAPI
{
public function API()
{
header('Content-Type: application/JSON');
$method = $_SERVER['REQUEST_METHOD'];
switch ($method)
{
case 'GET':
include('get.php');
break;
case 'POST':
include('post.php');
break;
case 'PUT':
include('put.php');
break;
case 'DELETE':
include('delete.php');
break;
default:
echo 'NOT SUPPORTED';
break;
}
}
}
编辑2:delete.php的完整代码
if (isset($_SERVER['HTTP_ORIGIN']))
{
header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Max-Age: 86400'); // cache for 1 day
}
// Access-Control headers are received during OPTIONS requests
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS')
{
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))
header("Access-Control-Allow-Methods: GET, POST, DELETE, PUT, OPTIONS");
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
header("Access-Control-Allow-Headers:{$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");
exit(0);
}
$valor['borrado'] = 0;
include('conexion.php');
$id = "";
//parse_str(file_get_contents('php://input'), $delete);
$input = file_get_contents('php://input');
print_r($input);
exit();
foreach (array_keys($delete) as $key)
{
$$key = $delete[$key];
}
if ($id != "")
{
//PREPARAMOS LA SENTENCIA SQL
$sql = "DELETE FROM Alumnado WHERE `ID`=?";
$resultado1=$conexion->prepare($sql);
$resultado1->bind_param('i', $id);
$resultado1->execute();
$valor['borrado'] = $resultado1->affected_rows;
}
$datos=json_encode($valor);
echo $datos;
Angular不会为
DELETE
发送请求正文,因此您必须从URL读取id
.service('ServiceName', function($http) {
return {
borrarAlumno: function(par) {
var link = "http://localhost/ws/index.php";
return $http.delete(link, {
params : {id: par.id}
})
}
}
})
通过
$\u get['id']
而不是文件获取内容('php://input');代码>您提到删除,但在PHP代码中,您在哪里提到删除?我看到的唯一选项是我们从另一个PHP代码重定向到此PHP,如:[code]case'DELETE]:include('DELETE.PHP');打破[/code]继续分享delete.php的代码,告诉我们您是否验证了delete.php被称为actuallydelete.php是我之前发布的代码。已验证是否调用了delete.php,我尝试回显一个字符串,结果成功了。无论如何,我在第二次编辑中发布了delete.php的完整代码。因此,delete.php的第一部分被跳过,因为请求方法等于delete。然后你应该在print\r($input)结束。上面说什么?