2016-07-29 17 views
2

Ich bin sehr sehr neu in PHP und Kohana. Es wurde bereits eine PHP-Kohana-Anwendung "Hallo Welt" erstellt, die erfolgreich im WAMP-Server läuft.Wie kann ich eine PHP Kohana Anwendung mit erholsamen Webservices erstellen?

Ich möchte, dass meine Anwendung als eine vollständige Server-Komponente ausgeführt wird.

Da ich nur serverseitige Logik in dieser Anwendung habe, sollte es ein ORM verwenden, um mit meiner MySQL-Datenbank zu kommunizieren.

Ich habe eine separate clientseitige Anwendung, die UI-Teile haben wird.

Also ich möchte, dass mein PHP-Kohana den RestFul Webservices-Aufruf von meinem Client erkennt und die JSON-Antwort entsprechend gibt.

Ist es möglich, eine Kohana-Anwendung zu erstellen, die RestFul-Webdienste unterstützt?

Wenn ja, geben Sie mir eine Anleitung zum Erstellen der Webdienste in Kohana Anwendung.

Gibt es einen solchen Beispielcode für eine Demo?

Antwort

1

Es gibt keine spezielle Demo oder Beispielcode, die ich kenne, so hoffentlich diese Tipps helfen Ihnen damit den Einstieg ...

Es ist möglich und relativ einfach, AJAX-Anforderungen zu akzeptieren und produzieren JSON Antworten mit Kohana. Das erste, was sein bewusst ist, dass anders gesagt, es sei denn, wird Kohana immer versuchen, die Ansicht zu erzeugen, und dies wird als JSON-Antwort nicht so der Reihe nach:

if ($this->request->is_ajax()) { 
    // Disable any rendering of the template so it just returns json. 
    $this->auto_render = FALSE; 
} 

Sie wahrscheinlich zu wollen, werde setze dies in die before() -Methode, wahrscheinlich des übergeordneten Controllers, so dass es immer ausgeführt wird, bevor du Daten von der DB bekommst.

Meine persönliche Vorliebe für so etwas wäre, ein Standard-AJAX-Antwort-Array einzurichten, so dass die Daten immer in einem relativ standardisierten Format zurückgegeben werden. Beispiel:

// Standard ajax response array. 
$this->ajax_response = array(
    'success' => FALSE, 
    'error' => NULL, 
    'raw_data' => NULL, 
    'generated' => '' 
); 

Passen Sie die oben genannten, um Ihre erforderliche Nutzung anzupassen. Wahrscheinlich möchten Sie dies auch in Ihrer before() -Methode.

Jetzt in Ihren Aktionsmethoden, holen Sie sich die Daten aus der Datenbank und fügen Sie sie dem Array hinzu.

public function action_foobar() { 
    // Get the primary key ID from the URL. 
    $var1 = $this->request->param('var1'); 

    $data = ORM::factory('Model', $var1); 
    if ($data->loaded()) { 
     $this->ajax_response['success'] = TRUE; 
     $this->ajax_response['raw_data'] = $data; 
    } else { 
     $this->ajax_response['error'] = 'Data could not be found.'; 
    } 
} 

Sie sollten dann in der Lage sein, diese Daten zu verlangen, indem Sie eine URL wie http://www.website.com/controller/foobar/42

Das letzte Stück des Puzzles Aufruf tatsächlich diese Daten zurückkehrt, wie es im Moment Kohana, weil nicht ausgegeben alles Wir haben es nicht gesagt. In Ihrem nach() -Methode wie folgt vor:

if ($this->request->is_ajax()) { 
    $this->request->headers('Content-Type', 'application/json'); 
    $this->response->body(json_encode($this->ajax_response)); 
} 

Dann bist du frei, diese Antwort zu interpretieren aber Sie sehen, passen in die jQuery auf Ihrem Client-seitige Anwendung:

$.ajax({ 
    type: "POST", 
    url: "http://www.website.com/controller/foobar/" + foobarId, 
    dataType: 'json', 
    success: function (data) { 
     if (!data.success) { 
      alert(data.error); 
     } else { 
      // Handle the returned data. 
     } 
    }, 
    error: function (xhr, status, errorThrown) { 
     // Something went very wrong (response failed completely). 
     alert(errorThrown); 
    } 
}); 

Viel Glück mit dem Aufbau deiner App! Ich hoffe, dass das hilft, wenigstens zu beginnen.