如何向Phil Sturgeon的CodeIgniter RestServer发送POST请求

时间:2012-07-20 14:45:07

标签: codeigniter rest rest-client http-post

我是CodeIgniter的新手。我正在使用Phil Sturgeon的RestServer和RestClient。我一直在尝试在我的CodeIgniter RestClient控制器中发出POST请求来更新我的CodeIgniter RestServer中的数据,但它永远不会更新我的数据库中的数据。我认为我的POST请求不对。

这是我在控制器中的RestClient POST请求:

$result = $this->rest->post('newscontroller/news/format/json', 
          array('news_id' => $news_id,
                'news_title' => $news_title,
                'news_category' => $news_category ),
                'json'); 

if(isset($result->status) && $result->status == 'success')  
{  
        $data['message'] ='News has been updated.';  
        $this->load->view('otherpageview',$data);
}     
else  
{  
        $data['message'] ='Something has gone wrong';  
        $this->load->view('otherpageview',$data);
} 

似乎 $ result 没有得到任何价值,因为我确实回应了 $ result->状态,并且没有任何内容可供显示。而且我在这个控制器的构造函数中也有这个:

// Load the rest client spark
$this->load->spark('restclient/2.1.0');

// Load the library
$this->load->library('rest');

// Run some setup
$this->rest->initialize(array('server' => 'http://api.therestserver.com/index.php/'));

在RestServer的控制器中, newscontroller ,有这种方法:

function news_post()
{
    $news=array(
        'news_id' => $this->post('news_id'),
        'news_title' => $this->post('news_title'),
        'news_category' => $this->post('news_category') );

    $result = $this->News_model->UpdateNews($news);  

    if($result === FALSE)  
    {  
        $this->response(array('status' => 'failed'));  
    }  
    else  
    {  
        $this->response(array('status' => 'success'));  
    }
}

使用 News_model

public function UpdateNews($news)
{
    $this->db->where('news_id',$news->news_id);
    $this->db->update('news',$news);        
}

我只是不知道我在哪里做错了,因为我仍然不明白POST请求和方法是如何工作的。我已经阅读了Nettuts中的教程并搜索了这个,但仍然......也许是因为我的英语阅读写得不好。我希望有人可以帮助我,任何帮助将不胜感激。万分感谢! :)

2 个答案:

答案 0 :(得分:5)

终于解决了这个问题! 这是我在RESTClient控制器中的POST请求是错误的。在做了一些搜索和大量尝试/更改代码后,此代码适用于我的RESTClient控制器中的POST请求:

$news_id = 12; //this is the id of the news that you want to edit

$method = 'post';
$params = array('news_id' => $news_id, 
'news_title' => $this->input->post('news_title'), 
'news_category' => $this->input->post('news_category') );
$uri = 'newscontroller/news';

$this->rest->format('application/json');

$result = $this->rest->{$method}($uri, $params);

if(isset($result->status) && $result->status == 'success')  
{  
    $data['message'] ='News has been updated.';  
    $this->load->view('otherpageview',$data);
}     
else  
{  
    $data['message'] ='Something has gone wrong';  
    $this->load->view('otherpageview',$data);
} 

reference

的帮助下获得了很多帮助

如果有人在RESTClient和RESTServer中需要一个正确的POST请求示例,我发布这个,因为我发现在PhilClurgeon的RESTClient-Server ***中很难找到POST请求的示例。

我正在使用:

  • RESTServer(philsturgeon)v.2.6.0
  • RESTClient(philsturgeon)v.2.1.0
  • cURL(philsturgeon)v.1.2.1
  • CodeIgniter v.2.0.3

答案 1 :(得分:0)

帖子的实施方式存在问题。请参阅issue on githubanother issue on github

您可以修补代码,也可以获取最新资源。

基本上你在RestServer application/libraries/REST_Controller.php中找到post函数,如果它看起来不像以下那样,那就把它改成:

public function post($key = NULL, $xss_clean = TRUE)
{
    if ($key === NULL)
    {
        return $this->_post_args;
    }

    return array_key_exists($key, $this->_post_args) ? $this->_xss_clean($this->_post_args[$key], $xss_clean) : FALSE;
}