backbone.js删除请求和codeigniter restserver(PHLS)问题

backbone.js删除请求和codeigniter restserver(PHLS)问题,codeigniter,rest,backbone.js,Codeigniter,Rest,Backbone.js,我肯定这是我做错了什么,但我似乎不明白。我正在使用backbone.js与我的rest服务器(Philip Sturgeon的codeigniter restserver)通信。我正在我的一个主干集合模型上运行普通模型.destroy() //a basic example tagCollection.at(5).destroy(); 这将创建对url的正确调用,如: 删除 当我进入“tag_delete”php函数并执行以下操作时: $this->delete('id'); 这总是一

我肯定这是我做错了什么,但我似乎不明白。我正在使用backbone.js与我的rest服务器(Philip Sturgeon的codeigniter restserver)通信。我正在我的一个主干集合模型上运行普通模型.destroy()

//a basic example
tagCollection.at(5).destroy();
这将创建对url的正确调用,如:

删除

当我进入“tag_delete”php函数并执行以下操作时:

$this->delete('id');
这总是一无所获。我认为这与backbone.js发送请求的方式有关,但没有任何东西向我跳出来。详情如下

主干网正在发出“删除”请求

我的REST\U控制器方法中的相关代码:

function tag_delete () {
    //delete the tag
    $id = $this->delete('id'); //always empty

    $result = $this->tag_model->delete($id);

    if (! $result) {
        $this->response(array('status' => 'failed'), 400);  
    }

    $this->response(array('status' => 'success'), 200);
}

有什么想法吗?在使用codeigniter和Philip Sturgeon的restserver时,任何backbone.js专家都会遇到这种情况?

这应该是一种廉价快捷的方法来修复您的删除请求

function tag_delete () {

     $id = $this->uri->segment(4);

     $result = $this->tag_model->delete($id);

     if (! $result) {
          $this->response(array('status' => 'failed'), 400);  
     }

     $this->response(array('status' => 'success'), 200);
}
然而,这就是我如何使用主干和REST_控制器组合来构造请求的方式

删除

(去掉url的/tag/id/段……这意味着您正在按id从“tags”集合中删除一个“tag”行,不需要追加/tag/id)

对于集合:

Backbone.Collection.extend({
    url : '/tags'
});

tagCollection.at(5).destroy();
然后将类似的内容添加到您的路线中:

$route['tags/(:num)'] = 'tags/tag/$1';

这将设置restserver控制器所需的结构。。。如果你要做大量的主干工作,那么这样做会更容易管理。

根据tgriesser的建议,最好的方法是对集合使用url属性。我以前使用过以下方法,其工作原理与charm类似(以下控制器使用silex framework+paris库实现数据访问):

在主干集合中,添加以下内容:

window.TodoList = Backbone.Collection.extend({
    model: Todo,

    url: "api/todos",

    ...
});

最近,我写了一篇关于如何使用Backbone.js和PHP执行GET/POST/PUT/DELETE的教程,可能会有所帮助。

我喜欢这个tgriesser!谢谢你的提示。我刚开始使用restful codeigniter,这对我来说很有意义。今天午餐时,我正在为这个问题设计一个解决方案,并提出了这样一个解决方案:我重载了$this->delete,方法是:
函数delete($var){$uri_array=$this->uri->uri_to_assoc(3);返回$uri_array[$var];}
,这样我仍然可以使用$this->delete('id'),并让它返回我期望的结果。也就是说,我们基本上在做同样的事情。感谢您抽出时间来查看!没问题-同样,与最初的问题无关,但是如果你开始遇到会话随机终止的问题,并且你的应用程序非常ajax/rest繁忙,那么看看这个线程如何修复它。-如果你最终遇到同样的问题,希望它能为你节省一点时间。所以,奇怪的是,这件事今天才开始发生在我身上,我想,“我知道有人在某个时候提到过这件事”,然后在那里找到了你的评论。谢谢你的提醒!
// DELETE   /{resource}/{id}    Destroy
$app->delete('/api/todos/{id}', function ($id) use ($app) {
    $todo =  $app['paris']->getModel('Todo')->find_one($id);
    $todo->delete(); 

    return new Response('Todo deleted', 200);
});
window.TodoList = Backbone.Collection.extend({
    model: Todo,

    url: "api/todos",

    ...
});