16

Spędziłem cały dzień próbując znaleźć ten problem. Publikowanie tego problemu jest moją ostatnią nadzieją. Mam nadzieję, że ktoś może pomóc w kontynuowaniu mojej pierwszej pracy.CodeIgniter Przesyłanie danych POST z RestClient do RestServer API

Tak, POST działa poprawnie, gdy bezpośrednio przekazuję dane z moich widoków bezpośrednio do RestServer. Jednak interfejs RESTServer API nie może znaleźć danych POSTs wysłanych z RestClient.

Oto fragmenty:

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

Wyniki:

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

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

uwaga: mam zastąpić żądania posty z danych zakodowanych, a mimo to RestServer nie może odebrać danych z mojego RestClient.

Jeśli chcesz, abym dostarczył cokolwiek innego, zapytaj.

Z góry dziękuję.

+0

Spróbuj z ustawionym formatem tylko z jsonem, jak '$ this-> reszta-> format ('json');' – jagad89

Odpowiedz

7

Ta metoda służy do wysyłania danych klienta odpoczynku do serwera odpoczynku przy użyciu metody post.Przeczytaj komentarz na każdej linii

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

// kod dla kontrolera employer/postNewProject

Controller

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

Na twoim RestServer API, nie będzie mieć dostępu do danych POST, dane POST z RestClient API są przekazywane do RestServer API przez $ param array, a RestServer API otrzymuje tę tablicę. W RestServer API powinieneś mieć możliwość dostępu do tych wartości za pośrednictwem tablicy $ param, zakładając, że funkcje API RestServer pobierają tablicę $ param i przekazują ją.

+0

Czy możesz pokazać mi jak uzyskać dostęp do '$ param' na RestServer? – Sobiaholic

+0

Właściwie w CodeIgnitor, powinieneś być w stanie uzyskać dostęp do zmiennych po $ this-> post ('id'); Dlatego jestem przekonany, że być może żądany reszta URL-a może być źle sformatowany. Czy masz dostęp do logu serwera RestAPI, aby zobaczyć, o jaki adres jest żądany? – zbot

+0

Logiem serwera RestAPI masz na myśli logi kodów? Sprawdziłem to i nie ma błędów w moim api. – Sobiaholic

7

Wyobrażam sobie, kiedy przepuszczany jest trzeci perometr (lub gdy usuwany jest trzeci parametr), to działa.

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

jeśli ktoś ma lepsze rozwiązanie, dzięki czemu mogę nagradzać nagrodę.

4

upewnij się odbierać dane, użyj

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

upewnić się od posta

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

Content type application/x-www-form-urlencoded wykorzystywane do metody 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'); 

Content type json dla metody POST RestServer API zostanie zmieniony na stanowisko

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