2012-09-17 14 views
5

Sto cercando il modo corretto di organizzare "classi oggetto risultato" in CodeIgniter. Queste classi sono usualy utilizzati in modelli come descritto in documentation:Dove mettere e come caricare la classe di oggetti risultato in Codeigniter?

È inoltre possibile passare una stringa ai risultati(), che rappresenta una classe di instantiate per ciascun oggetto risultato (nota: questa categoria deve essere caricato)

$query = $this->db->query("SELECT * FROM users;"); 

foreach ($query->result('User') as $row) 
{ 
    echo $row->name; // call attributes 
    echo $row->reverse_name(); // or methods defined on the 'User' class 
} 

Quindi, dove mettere la classe 'Utente' e c'è un modo 'ufficiale' come caricarlo?

risposta

2

Prova a utilizzare una libreria.

posto la classe nella cartella dell'applicazione/librerie, quindi utilizzare il caricatore per caricarlo:

$this->load->library('user'); 
+0

Assolutamente no, perché creerà una nuova istanza di classe utente e non desidero avere quell'oggetto vuoto in memoria. E, naturalmente, le classi di oggetti risultato non sono affatto librerie. – sasa

+0

L'uso $ this-> load file() per caricare un file php che contiene le tue classi –

0

Non è esattamente quello che chiedono, ma io uso spesso un MY_Model con:

public function merge_object(&$object, $data){ 

    if (is_object($data)) { 
     $data = get_object_vars($data); 
    } 
    if (!empty($data)) { 
     foreach ($data as $property => $value) { 
      if (!property_exists($object, $property)) { 
       $object->$property = $value; 
      } 
     } 
    } 
    return $object; 
} 

e quindi chiama $ this-> merge_object ($ this, $ data); dal __construct ($ data = array())

Quando si chiama una funzione modello, restituisce anche un'istanza della classe del modello e quindi è possibile accedere a qualsiasi metodo. Fa essenzialmente quello che stai cercando di fare.

Problemi correlati