簡體   English   中英

使用Slim Framework無法從DELETE請求中獲取正文

[英]Cannot get body from DELETE request with Slim Framework

我正在使用Beta.js和Slim Framework開發應用程序。 問題在這里:我需要通過執行一個MySQL存儲過程來刪除一條記錄,該存儲過程除了要刪除的記錄的ID之外還接收另一個參數來執行一些業務邏輯。 問題是我只收到記錄的ID。 我的$ app-> request()-> getBody(); 是空白的。 這是代碼:

/rest/folder/index.php

<?php
require_once '../../vendors/Slim/Slim.php';
\Slim\Slim::registerAutoloader();
$app = new \Slim\Slim();

$app -> get('/categories/', function() use ($app) {
    require_once ('../../libs/auth.inc');
    $auth = new Authentication();
    $user_id = $auth -> SessionAuthenticate();

    require_once ('categories.php');
    $categories = new Categories();
    $categories -> getCategories($app, $user_id);
});

$app -> post('/categories/', function() use ($app) {
    require_once ('../../libs/auth.inc');
    $auth = new Authentication();
    $user_id = $auth -> SessionAuthenticate();

    require_once ('categories.php');
    $categories = new Categories();
    $categories -> saveCategory($app, $user_id);
});

$app -> put('/categories/:category_id', function($category_id) use ($app) {
    require_once ('../../libs/auth.inc');
    $auth = new Authentication();
    $user_id = $auth -> SessionAuthenticate();

    require_once ('categories.php');
    $categories = new Categories();
    $categories -> saveCategory($app, $user_id);
});

$app -> delete('/categories/:category_id', function ($category_id) use ($app) {
    require_once ('../../libs/auth.inc');
    $auth = new Authentication();
    $user_id = $auth -> SessionAuthenticate();

    require_once('categories.php');
    $categories = new Categories();
    $categories -> deleteCategory($app, $user_id, $category_id);
});

$app -> run();

這是我在/rest/folder/categories.php上的刪除功能

public function deleteCategory($app, $user_id,$category_id) {
    $requestBody = $app->request()->getBody();
    $params = json_decode($requestBody, true);

    $agreement_id = $params['agreement_id'];

    $con = $this->conectarDB();
    $query = "CALL SPD_CATEGORIES($category_id,$agreement_id);";

    //print_r($query);

    $result = $this->con->query($query);    
    $this->con->close();
    $app->status(200);
    echo json_encode($result);
}

這是我在/modules/folder/CategoriesView.js上的主干刪除功能

confirmDeleteForm : function(event) {
    event.preventDefault();
    var category_id = $('#categories_select').select2("val");
    var self=this;

    this.category = this.categories.findWhere({'category_id':category_id});
    var agreement_id = this.category.get('agreement_id');

    $('#deleteModal').modal('hide');

    this.category.destroy({
        data: {
            'agreement_id': agreement_id,
        },
        processData : true,         
        success: function(model, response) {

            self.cleanForm();
            self.getCategories();
        },
        error: function(model, response) {
            if (response.status == 500) {
                self.showErrorMessage('Se produjo un error en el servidor', 'ERROR');
            } else {
                self.showErrorMessage(response.responseText, 'ATENCION');
            }
        }
    });

},

在銷毀模型中,我嘗試添加DATA:和HEADERS:,但沒有任何工作。

有可能做到嗎?

提前致謝。

更新1:

我發現了這一點:第一個答案中提到的Slim v2

這是: Backbone.js (BACKBONE.ROUTER標題)

這就是我現在正在嘗試的。 我確實可以上班,但是我認為這是解決我遇到的問題的方法。

更新2

仍然可以弄清楚該怎么做。 因此,由於臨近截止日期,我將數據庫結構更改為僅刪除具有行ID的數據庫。 完成項目后,我將繼續嘗試此操作。

謝謝。

您已閱讀以下內容: http : //docs.slimframework.com/routing/delete/#method-override嗎?

不幸的是,現代瀏覽器不提供對HTTP DELETE請求的本機支持。

...如果您使用Backbone.js或命令行HTTP客戶端,則還可以使用X-HTTP-Method-Override標頭覆蓋HTTP方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM