web-dev-qa-db-ja.com

CodeIgniterがRestClientからRestServerAPIにPOSTデータを渡す

私はこの問題を理解しようと一日を過ごしました。この号をここに投稿することが私の最後の希望です。誰かが私の最初の仕事に取り組み続けるのを手伝ってくれることを願っています。

したがって、POSTは、ビューからRestServerに直接データを渡す場合は正常に機能します。ただし、RESTServer APIは、RestClientから送信されたPOSTデータを見つけることができません。

スニペットは次のとおりです。

RestClient API:

        $ver = 'v1';
        $config = array('server'          => base_url()."v1",
                        'api_key'         => 'xxxxxx',
                        'api_name'        => 'X-API-KEY',
                        'http_user'       => 'admin',
                        'http_pass'       => 'xxxxx',
                        'http_auth'       => 'basic',
                );

        $this->rest->initialize($config);
        $this->rest->format('application/json');
        $param = array(
                'id' => $this->input->post('id'), // works fine here
                'name' => $this->input->post('name')
                );
        $user = $this->rest->post('employer/postNewProject', $param, 'json');


        //if (isset($user->errors)) show_404('admin');
        $this->rest->debug();

RestServer API

class Employer extends REST_Controller
{
    public function __construct()
    {
        parent::__construct();
        $this->lang->load("application");
        $this->load->library("users/auth"); 
        Datamapper::add_model_path( array( APPPATH."modules" ) );
    }

    public function postNewProject_post()
    {  
        // I tired $this->post() and $this->input->post() but both not finding the data
        $message = array("id" => $this->post("id"), "name" => $this->input->post("name"));
        $this->response($message, 200); // 200 being the HTTP response code
    }
}

結果:

Response when using $this->post('id');
{"id":false}

Response when using $this->post();
{"id":[]}

注:POSTSリクエストをハードコードされたデータに置き換えましたが、それでもRestServerはRestClientからデータを受信できません。

他に何か提供する必要がある場合は、お問い合わせください。

前もって感謝します。

17
Sobiaholic

このメソッドを使用して、postメソッドを使用してRESTクライアントデータをRESTサーバーに送信します。すべての行のコメントを読む

// initialize you setting 
     $config = array('server' => base_url() . "v1",
            'api_key' => 'xxxxxx',
            'api_name' => 'X-API-KEY',
            'http_user' => 'admin',
            'http_pass' => 'xxxxx',
            'http_auth' => 'basic',
        );
        $this->rest->initialize($config);
// Set method of sending data

        $method = 'post';
// create your param data

        $param = array(
            'id' => $this->input->post('id'), // works fine here
            'name' => $this->input->post('name')
        );
// url where you want to send your param data.

        $uri = 'employer/postNewProject';
        // set format you sending data
        $this->rest->format('application/json');

// send your param data to given url using this

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

//コントローラーのコードemployer/postNewProject

コントローラー

function postNewProject()
{
    $data=array(
        'id' => $this->post('id'),
        'name' => $this->post('name')
        );
      print_r($data);
}
7
Saty

空の3番目のパラメーターが渡されたとき(または3番目のパラメーターを削除したとき)がわかり、それが機能します。

    //Not working
    $user = $this->rest->post('employer/postNewProject', $param, 'json');
    //when i change to this ,it's working
     $user = $this->rest->post('employer/postNewProject', $param.'');
     //or 
    $user = $this->rest->post('employer/postNewProject', $param);

誰かが私が賞金を授与できるようにもっと良い解決策を持っているなら。

7
Abdul Manan

データを確実に受信し、

 echo '<pre> all data received: '.print_r($_REQUEST,1).'</pre>';

投稿からであることを確認してください

echo '<pre> post data: '.print_r($_POST,1).'</pre>';
4
user1817927

コンテンツタイプapplication/x-www-form-urlencoded postメソッドに使用

 $param = array(
            'id' => $this->input->post('id'), // works fine here
            'name' => $this->input->post('name')
            );

 $user = $this->rest->post('employer/postNewProject', $param, 'application/x-www-form-urlencoded');

コンテンツタイプjson postメソッドのRestServerAPIはpost用に変更されます

public function postNewProject_post()
{  
   $entity = file_get_contents('php://input', 'r');
   print_r($entity);
}
1
swaroop suthar