SlimPHP + AngularJS PUT路由不起作用

时间:2014-12-10 03:28:08

标签: angularjs rest slim

尝试使用$ 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中的请求: put route

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

我做错了什么?

编辑:

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

1 个答案:

答案 0 :(得分:0)

通过添加以下快速和脏的调试代码来确认您是否正在点击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路线被点击,我可能会选择进行故障排除。