CodeIgniter Передача данных POST из RestClient в RestServer API

Я потратил весь свой день, пытаясь понять эту проблему. Опубликовать эту проблему здесь - моя последняя надежда. Надеюсь, кто-то может помочь продолжить работу над моей первой работой.

Итак, POST отлично работает, когда напрямую передаются данные из моих представлений на RestServer напрямую. Однако API RESTServer не может найти данные POST, отправленные из RestClient.

Вот фрагменты:

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.

Если вам нужно, чтобы я предоставил что-нибудь еще, спросите.

Спасибо заранее.

Ответы

Ответ 1

Используйте этот метод для отправки данных клиента Rest на сервер отдыха с использованием метода post. Прочитать комментарий к каждой строке

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

Ответ 2

Я выясню, когда и пуст 3-й периметр передается (или когда вы удаляете третий параметр), тогда он работает.

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

если у кого-то есть лучшее решение, чтобы я мог наградить награду.

Ответ 3

убедитесь, что вы получаете данные, используйте

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

убедитесь, что это сообщение

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

Ответ 4

Тип контента 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     API RestServer будет изменен для post

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

Ответ 5

В вашем RestServer API он не будет иметь доступа к данным POST, данные POST из интерфейса RestClient API передаются в RestServer API через массив $param, а RestServer API получает этот массив. В RestServer API вы можете получить доступ к этим значениям через массив $param, предполагая, что функции RestServer API потребляют массив $param и передают его через.