Ich arbeite an meiner REST-Client-Bibliothek für CodeIgniter und habe Probleme damit, herauszufinden, wie PUT- und DELETE-Argumente in PHP gesendet werden.
An einigen Stellen habe ich Leute gesehen, die die Optionen verwendet haben:
$this->option(CURLOPT_PUT, TRUE);
$this->option(CURLOPT_POSTFIELDS, $params);
Ärgerlicherweise scheint dies nichts zu bewirken. Ist dies der richtige Weg, um PUT-Parameter einzustellen?
Wenn ja, wie stelle ich die DELETE-Parameter ein?
$ this-> option () ist Teil meiner Bibliothek. Es baut einfach ein Array von CURLOPT_XX-Konstanten auf und sendet sie an curl_setopt_array (), wenn die aufgebaute cURL-Anforderung ausgeführt wird.
Ich versuche, die Parameter PUT und DELETE mit dem folgenden Code zu lesen:
case 'put':
// Set up out PUT variables
parse_str(file_get_contents('php://input'), $this->_put_args);
break;
case 'delete':
// Set up out PUT variables
parse_str(file_get_contents('php://input'), $this->_delete_args);
break;
Hier gibt es zwei Möglichkeiten: Ich gehe das falsch an oder irgendwo in meinen Bibliotheken gibt es einen Fehler. Wenn Sie mich wissen lassen könnten, ob dies theoretisch funktionieren sollte, kann ich das Debuggen einfach so lange durchschlagen, bis ich es gelöst habe.
Ich möchte keine Zeit mehr mit einem Ansatz verschwenden, der grundlegend falsch ist.
quelle
POST
/DELETE
Parameter oder EmpfangenPOST
/DELETE
Parameter?Antworten:
Anstatt use zu
CURLOPT_PUT = TRUE
verwendenCURLOPT_CUSTOMREQUEST = 'PUT'
undCURLOPT_CUSTOMREQUEST = 'DELETE'
dann einfach Werte mit zu setzenCURLOPT_POSTFIELDS
.quelle
Hier ist ein Code, der für andere hilfreich sein kann, die PUT- und DELETE-Parameter verarbeiten möchten. Sie können festlegen
$_PUT
und$_DELETE
über$GLOBALS[]
, aber sie sind in Funktionen nur dann direkt verfügbar, wenn sie deklariert sindglobal
oder über$GLOBALS[]
. Um dies zu umgehen, habe ich eine einfache Klasse zum Lesen von GET / POST / PUT / DELETE-Anforderungsargumenten erstellt. Dies wird auch$_REQUEST
mit PUT / DELETE-Parametern gefüllt.Diese Klasse analysiert die PUT / DELETE-Parameter und unterstützt auch GET / POST.
quelle
Denken Sie daran, dass die meisten Webserver keine PUT & DELETE-Anforderungen verarbeiten. Da Sie eine Bibliothek erstellen, würde ich vorschlagen, darüber nachzudenken, dies zu berücksichtigen. Normalerweise gibt es zwei Konventionen, mit denen Sie PUT & DELETE per POST nachahmen können.
Im Allgemeinen unterstützen die meisten RESTful-Services, die PUT & DELETE nicht direkt zulassen, mindestens eine dieser Strategien. Mit cURL können Sie bei Bedarf über die
CURLOPT_HTTPHEADER
Option einen benutzerdefinierten Header festlegen .quelle
Ich denke, Sie mischen Ihre Verben - PUT dient zum Einfügen einer Datei, POST zum Posten von Variablen (obwohl Sie eine Datei POSTEN können).
Verwenden Sie zum Festlegen der Post-Variablen
CURLOPT_POSTFIELDS
entweder eine Zeichenfolgeparam1=val1¶m2=val2
oder ein assoziatives Array.Um ein LÖSCHEN durchzuführen, sollten Sie die Curl-Option verwenden
CURLOPT_CUSTOMREQUEST
quelle
Dies ist meine Version von DELETE for CI. Es akzeptiert Argumente im GET-Stil für DELETE, auch Argumente mit demselben Namen, dh: GET / some / url? Id = 1 & id = 2 & id = 3
quelle
So löse ich mein DELETE-Problem:
== >> in REST_Controller.php ersetze ich die delault _parse_delete () Funktion durch:
;) Für mich geht das!
quelle