5

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->statusをエコーし​​ましたが、表示するものが何もないため、$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/'));

そして、 newscontroller である RestServer のコントローラーには、次のメソッドがあります。

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 のチュートリアルを読み、これについて検索しましたが、それでも..おそらく英語の読み書きが下手なためです。誰かが私を助けてくれることを願っています。ありがとうございます!:)

4

2 に答える 2

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);
} 

このリファレンスから多くの助けを借りて

Phil Sturgeon による RESTClient-Server*** での POST リクエストの例を探すのが難しいため、RESTClient と RESTServer での正しい POST リクエストの例が必要な場合は、これを投稿します。

私は使用しています:

  • RESTServer (philsturgeon) v.2.6.0
  • RESTClient (philsturgeon) v.2.1.0
  • cURL (フィルスタージョン) v.1.2.1
  • CodeIgniter v.2.0.3
于 2012-08-01T04:12:03.113 に答える
0

投稿の実装方法に問題がありました。github の問題とgithub別の問題を参照してください。

コードにパッチを当てるか、最新のソースを入手できます。

基本的に、RestServer でポスト関数を見つけますapplication/libraries/REST_Controller.php。次のように見えない場合は、次のように変更します。

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;
}
于 2012-07-20T16:15:07.020 に答える