【问题标题】:SlimPHP + AngularJS PUT route not workingSlimPHP + AngularJS PUT 路由不起作用
【发布时间】:2014-12-10 03:28:07
【问题描述】:

我在尝试使用 $http.put 时遇到错误。这条路线是在 slimPHP 中击中我的 $app->get 块。

这是我的 controller.js 代码,其中 credit 是一个对象:

$http.put('/api/credit_module/credits/'+credit.id, credit).
    success(function(data, status, headers, config){
        if(data['errors'].length == 0){
            console.log(data['results']);
        }else{
            alert(data['errors']);
        }
    });

在 slimPHP 代码中,这里是获取单个信用的路径:

$app->get('/credits/:id', function ($id){

include 'DBConnects/credit_module_db.php';
include 'common/response/common_setup.php';

$data = $db->credit("id = ?", $id)->result_array();

if($data){
    $result['status_code'] = 200;                           
}else{
    $result['status_code'] = 101;
}

$result['results'] = $data; 
$result['errors'] = $errors;

echo json_encode($result,128);

});

这是 put 路线,根本没有被击中:

$app->put('/credits/:id', function ($id) use ($app, $v){

include 'DBConnects/credit_module_db.php';

include 'common/response/common_setup.php';
include 'common/response/put_setup.php';

//Error validation is here

if(sizeof($errors) == 0){   
    $row = $row->update($bodyArray);
    if($row != false){
        $result['status_code'] = 200;
    }else{
        $result['status_code'] = 101;
        $errors[] = 'failed to update row';
    }           
}else{
    $result['status_code'] = 101;
}

$result['results'] = $data; 
$result['errors'] = $errors;

echo json_encode($result,128);

});

这是请求在 chrome 中的样子:

但是,来自请求的结果数据来自 get 路由而不是 put 路由,因此不会发生更新。

我做错了什么?

编辑:

事实证明,服务器阻止了所有 PUT 和 DELETE 请求。如果您没有 root 访问权限并且遇到奇怪的问题,请咨询您的托管公司。

【问题讨论】:

    标签: angularjs rest slim


    【解决方案1】:

    通过添加以下快速而简单的调试代码来确认您是否点击了PUT 路由:

    $app->put('/credits/:id', function ($id) use ($app, $v) {
        die(var_dump('PUT ROUTE')); // Add this die and var_dump
    
        // ... snip ...
    });
    

    然后从命令行发出PUT请求:

    curl -v -X PUT http://<your url here>/api/credit_module/credits/999
    

    如果您在 curl 请求的输出中得到 PUT ROUTE,请再次尝试 Angular 请求以确保 Angular 请求没有问题。如果两个请求都返回PUT ROUTE,则问题不在于 Slim 的路由。

    事实上,您确定问题不在include 'common/response/put_setup.php'; 中吗?包含的代码中是否存在导致PUT 路由返回与GET 路由相同的复制和粘贴错误?如果调试证明您的 PUT 路由受到攻击,我可能会选择在此处进行故障排除。

    【讨论】:

    • 谢谢,这是一个快速测试的好方法。我最终确实发现它实际上是被服务器本身阻止的。
    • 我很高兴你知道了。我很确定我会被那个人难倒很长一段时间。
    猜你喜欢
    • 2016-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-02
    • 2018-03-18
    • 2016-09-24
    • 1970-01-01
    相关资源
    最近更新 更多