2016-04-23 12 views
0

Ich habe eine Menge Fragen gestellt, die in letzter Zeit mit der Erstellung von RESTful-Diensten mit PHP zusammenhängen. Meine Frage ist dies: Können alle Dienste (GET, POST, PUT, DELETE) von einem einzigen Web-Formular mit Radio-Buttons getan werden?
Dies ist, was ich in meinem Kopf bin picturing:PHP Rest Service mit einem HTML-Formular?

<form action="MyService.php" method="GET"> 
     <label for="username">Username</label> 
     <input type="text" name="username" id="username" /><br /> 
     <label for="password">Password</label> 
     <input type="password" name="password" id="password" /><br /> 
     <label for="id">Task ID</label> 
     <input type="text" name="id" id="id"/><br /> 
     <label for="desc">Task Description</label> 
     <input type="text" name="desc" id="desc"/><br /> 
     <label> 
      <input type="radio" name="service" value="getRadio" checked/> GET 
     </label> 
     <label> 
      <input type="radio" name="service" value="postRadio" /> POST<br /> 
     </label> 
     <input type="hidden" name="REQUEST_METHOD" value="GET"/><br /> 
     <input type="hidden" name="REQUEST_METHOD" value="POST"/><br /> 
     <input type="hidden" name="REQUEST_METHOD" value="PUT"/><br /> 
     <input type="hidden" name="REQUEST_METHOD" value="DELETE"/><br /> 
     <input type="submit" name="submit" value="ACTION"/> 
</form> 

Es ist unvollständig, so weit, aber was ich bin zu versuchen, das Denken zu tun, für jeden Dienst Optionsfeld Auswahl hat, dann meine PHP-Datei umreißen wie folgt:

$request = $_SERVER["REQUEST_METHOD"] 
switch($request) { 
    case 'GET': 
     // logic for GET based on radio button selected 
     break; 
    case 'POST': 
     // logic for POST based on radio button selected 
     break; 
    // and then PUT and DELETE 
} 

Ist das machbar? Wenn ja, bin ich auf dem richtigen Weg oder muss ich Änderungen vornehmen?

+1

Leider nur, HTML-Formulare GET und POST unterstützen. http://stackoverflow.com/questions/165779/are-the-put-delete-head-etc-methods-available-in-fast-web-browsers. Andernfalls müssen Sie AJAX verwenden, um andere Methoden zu verwenden. –

+0

gibt es Hinweise dafür in der Arbeitsgruppe https://www.w3.org/TR/form-http-extensions/#http-delete-form –

+0

Ich würde die Formulare abwerfen (sie trotzdem einreichen) und serialize und ajax verwenden um die Einreichung zu machen. https://api.jquery.com/serialize/ – ArtisticPhoenix

Antwort

0

Wenn Sie die Formulare verwenden möchten, und vorausgesetzt, es funktioniert wie scheint von this spec, dann können Sie einige Javascript verwenden, um die method Ihres Formulars onsubmit zu ändern.

<form action="MyService.php" method="GET" onsubmit='this.method = this.service.value'> 
 
     <label for="username">Username</label> 
 
     <input type="text" name="username" id="username" /><br /> 
 
     <label for="password">Password</label> 
 
     <input type="password" name="password" id="password" /><br /> 
 
     <label for="id">Task ID</label> 
 
     <input type="text" name="id" id="id"/><br /> 
 
     <label for="desc">Task Description</label> 
 
     <input type="text" name="desc" id="desc"/><br /> 
 
     <label> 
 
      <input type="radio" name="service" value="GET" checked/> GET 
 
     </label> 
 
     <label> 
 
      <input type="radio" name="service" value="POST" /> POST<br /> 
 
     </label> 
 
     <label> 
 
      <input type="radio" name="service" value="PUT" /> PUT 
 
     </label> 
 
     <label> 
 
      <input type="radio" name="service" value="DELETE" /> DELETE<br /> 
 
     </label> 
 
     <input type="hidden" name="REQUEST_METHOD" value="GET"/><br /> 
 
     <input type="hidden" name="REQUEST_METHOD" value="POST"/><br /> 
 
     <input type="hidden" name="REQUEST_METHOD" value="PUT"/><br /> 
 
     <input type="hidden" name="REQUEST_METHOD" value="DELETE"/><br /> 
 
     <input type="submit" name="submit" value="ACTION"/> 
 
</form>