2012-11-25 11 views
6

Ich erstelle ein Web-Service-Backend für eine mobile App, die ich entwickle. (Ich bin ein Obj-C-Entwickler, kein Web-Designer!) Im Wesentlichen möchte ich Codetigniter und Phil Sturgeons RESTful-API-Server https://github.com/philsturgeon/codeigniter-restserver verwenden, aber ich habe Probleme damit, alles einzurichten und zu arbeiten.REST API mit CodeIgniter

Ich habe MySQL-Datenbank, die mit Daten darin eingerichtet ist. Und ich brauche Hilfe beim Schreiben eines CodeIgniter PHP-Modells und -Controllers, der JSON-Daten von dem, was sich in dieser Datenbank befindet, zurückgibt. Alle Tutorials und Forenbeiträge, die ich gefunden habe, haben mit hardcodierten Daten im Controler zu tun, keine MySQL-Datenbank. Ich würde im Idealfall gerne die URL wie diese http://api.mysite.com/v1/search?id=1&name=foo&city=bar formatiert haben, könnte ich möglicherweise mehr als 50 Parameter in der URL übergeben.

Mit Phils Code, ich habe mit diesem als meinem Controller kommen:

public function index_get() 
{ 
    if (!$this->get('id')) 
    { 
     $this->response(NULL, 400); 
    } 

    $data = $this->grid_m->get_id($this->get('id')); 
    if ($data) 
    { 
     $this->response($data, 200); 
    } 
    else 
    { 
     $this->response(NULL, 404); 
    } 
} 

Das ist mir nur ein Suchwort wird:? Id = # .. ich wissen müssen, wie

mehrere Suchbegriffe erhalten Hier

ist mein Codeigniter Modell:

<?php 

class Grid_m extends CI_Model 
{ 

function get_all() 
{ 
    $query = $this->db->get('grid'); 
    if ($query->num_rows() > 0) 
    { 
     return $query->result(); 
    } 
    return FALSE;; 
} 

das gibt einfach alles in meiner MySQL-Datenbank, unabhängig von dem, was id oder URL Begriff, den ich es in der URL übergeben.

Ich bin ein großer Noob, wenn es um die Entwicklung meiner eigenen benutzerdefinierten API geht, so dass alle Vorschläge zur Behebung meines Controllers und Datenbankmodells eine große Hilfe wären!

Danke für die Hilfe!

-Brian

+0

Nun wird Ihre Methode „get_all“ genannt, also nehme ich an dem Verhalten richtig ist ... zeigt die „GET_ID()“ Methode anstelle –

Antwort

0

Benutzer Codeigniter's Active record richtige Abfrage erstellen, können Sie jede Art von Abfrage erstellen können Methoden des aktiven Datensatz verwenden, finden folgendes Beispiel habe ich eine Bedingung nur darin hinzugefügt Sie mehr Bedingungen nach Ihrem Bedarf hinzufügen .

<?php 
class Grid_m extends CI_Model 
{  
    function get_all() 
    { 
    $this->db->select('col1, col2, col3')->where('id', 5); 
    $query = $this->db->get('grid'); 

    if ($query->num_rows() > 0) 
    { 
     return $query->result(); 
    } 
    return FALSE;; 
    } 

} 
+2

Im Code-Schnipsel, er ist es tatsächlich bereits mit –

+0

aber Er weiß nicht, andere Möglichkeiten, abzufragen –

+0

Das ist großartig und half mir, einen Teil meiner Probleme zu erreichen, aber wie könnte ich mehr Parameter von meiner URL übergeben? ie: search? type = Restaurant & location = San% 20Francicso – Brian

0

Bitte überprüfen Sie abfragen

$query = $this->db->get_where('grid', array('id' => $id)); 
1

Das ist alte Frage, aber wenn jemand hier gehen und immer noch Hilfe benötigen, versuchen Sie diese Code:

In Ihrem Controller:

public function index_get() 
{ 
    $where = ''; 

    if ($this->get('id')) // search by id when id passed by 
    {    
     $where .= 'id = '.$this->get('id'); 
    } 

    if ($this->get('name')) // add search by name when name passed by   
    { 
     $where .= (empty($where)? '' : ' or ')."name like '%".$this->get('name')."%'"; 
    } 

    if ($this->get('city')) // add search by city when city passed by 
    { 
     $where .= (empty($where)? '' : ' or ')."city like '%".$this->get('city')."%'"; 
    } 

    // you can add as many as search terms 

    if (! empty($where)) 
    { 
     $data = $this->grid_m->get_searched($where); 

     if ($data) 
     { 
      $this->response($data, 200); 
     } 
     else 
     { 
      $this->response(NULL, 404); 
     } 
    } 
    else 
    { 
     $this->response(NULL, 404); 
    } 
} 

Erstellen Sie in Ihrem Modell get_searched Funktion:

class Grid_m extends CI_Model 
{ 
    function get_searched($where = NULL) 
    { 
     if (! is_null($where)) 
     { 
      $this->db->where($where); 
      $query = $this->db->get('grid'); 

      if ($query->num_rows() > 0) 
      { 
       return $query->result(); 
      } 
     } 
     return FALSE; 
    } 
}