2012-06-12 13 views
12

Como dice el título, estoy usando Codeigniter con phil sturgeon - codeigniter-restserver framework.Cómo enviar la solicitud DELETE a phil sturgeon's - codeigniter-restserver

He seguido el tutorial en Nettus y todo funciona bien excepto cuando se envía una solicitud DELETE.

Código:

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

estoy usando un FF Addon llama de prueba de recursos HTTP, para enviar la solicitud, pero cuando envío una solicitud DELETE con esta URL: http://localhost/api/client/user/id/1, recibo { "regresar de borrado: ": false}

como nota al margen: yo encontramos este post y el uso de la 'X-HTTP-Method-Override' encabezado y enviarlo como una solicitud posterior que era capaz de conseguir la identificación, pero yo prefiero que esté una forma en que el cliente no tiene que agregar este encabezado.

+4

1 por el título '¿Cómo enviar solicitud DELETE utilizando Phil esturión' – fire

+0

Gracias por notarlo, voy a estar seguro para editarlo :) – Tomer

+0

Mira este Gist: gist.github.com/Ema4rl/aebb63db1c76786c9cba811d69339fd3 – Ema4rl

Respuesta

13

De acuerdo con la especificación HTTP DELETE no puede enviar parámetros. Puede tener cosas en la URL, por lo que podría cambiar esto a:

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

Gracias Phil, gran FW por cierto :). Así que supongo que el tutorial en Nettuts no se actualiza ya que el código es de allí. También la URL debe ser: http : // localhost/api/client/user/1 (elimine/id /) – Tomer

+0

solo un comentario, pero ¿no debería usar algo más como 'localhost/api/client/user/delete/1' o algo así? – gorelative

+1

ftom2: Internet es un archivo, no todos los artículos se mantienen para siempre y no podría hacer eso si quisiera. –

0

que tenía el mismo problema un este trabajo para mí

1 -> en REST_Controller.php reemplazar el _parse_delete defecto () funcionar por:

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

¡Eso es todo! no hay más necesidad de "user_delete ($ id) ''

+0

Mira este Gist: gist.github.com/Ema4rl/aebb63db1c76786c9cba811d69339fd3 – Ema4rl

Cuestiones relacionadas