2012-06-12 15 views
12

Jak sama nazwa wskazuje, używam Codeigniter z phil jesior - framework codeigniter-restserver.Jak wysłać żądanie DELETE do jesiotra phil - kodigniter-restserver

Podążyłem za tutorialem na temat Nettus i wszystko działa poprawnie. Z wyjątkiem wysyłania żądania DELETE.

Kod:

<?php 
require(APPPATH.'libraries/REST_Controller.php'); 

class Client extends REST_Controller{ 

function user_get() 
{ 
    $data = array('returned:'=> $this->get('id')); 
    $this->response($data); 
} 

function user_post() 
{ 
    $data = array('returned:'=> $this->post('id')); 
    $this->response($data); 
} 

function user_put() 
{ 
    $data = array('returned:'=> $this->put('id')); 
    $this->response($data); 
} 

function user_delete() 
{ 
    $data = array('returned from delete:'=> $this->delete('id')); 
    $this->response($data); 
} 
} 

Używam FF Addon zwany test zasobów HTTP, aby wysłać żądanie ale kiedy wysłać żądanie usunięcia z tego adresu URL: http://localhost/api/client/user/id/1, otrzymuję { "powrócił z kasowania: „: false}

marginesie: Znalazłem post i przy użyciu nagłówka«X-HTTP-Method-Override»i wysłanie go jako wniosek postu udało mi się uzyskać identyfikator, ale preferujących sposób, w którym klient nie musi dodawać tego nagłówka.

+4

+1 o tytuł«Jak wysłać żądanie za pomocą DELETE phil jesiotra» – fire

+0

Dzięki za zauważenie, będę na pewno by go zmieniać :) – Tomer

+0

Sprawdź to: Gist: gist.github.com/Ema4rl/aebb63db1c76786c9cba811d69339fd3 – Ema4rl

Odpowiedz

13

Zgodnie ze specyfikacją HTTP polecenie DELETE nie może wysłać parametrów. To może mieć rzeczy w adresie URL, więc można zmienić na:

public function user_delete($id) 
{ 
    $this->response(array(
     'returned from delete:' => $id, 
    )); 
} 
+0

Dzięki Phil, świetna FW nawiasem mówiąc :) Więc domyślam się, że tutorial o Nettuts nie jest aktualizowany, ponieważ kod pochodzi stąd. : // localhost/api/client/user/1 (usuń/id /) – Tomer

+0

tylko komentarz, ale czy nie powinieneś używać czegoś bardziej podobnego do 'localhost/api/client/user/delete/1' lub coś takiego? – gorelative

+1

ftom2: Internet to archiwum, nie każdy artykuł jest utrzymywany na zawsze i nie mogłem tego zrobić, gdybym chciał. –

0

miałem ten sam problem to praca dla mnie

1 -> w REST_Controller.php zastąpić domyślny _parse_delete () funkcja:

protected function _parse_delete() 
{ 
    $this->_delete_args = $_DELETE; 
    $this->request->format and $this->request->body = file_get_contents('php://input'); 
    // Set up out DELETE variables (which shouldn't really exist, but sssh!) 
    parse_str(file_get_contents('php://input'), $this->_delete_args); 
} 

To wszystko! więcej nie potrzeba "user_delete ($ id)«»

+0

Sprawdź to Gist: gist.github.com/Ema4rl/aebb63db1c76786c9cba811d69339fd3 – Ema4rl

Powiązane problemy