2012-09-17 7 views
5

Estoy buscando la forma adecuada de organizar 'Clases de objetos de resultado' en CodeIgniter. Estas clases se utilizan usualy en modelos como se describe en documentation:¿Dónde colocar y cómo cargar la clase de objeto de resultado en Codeigniter?

También puede pasar una cadena para dar como resultado(), que representa una clase para instantiate para cada objeto resultado (nota: esta clase se debe cargar)

$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 
} 

Entonces, ¿dónde poner la clase 'Usuario' y hay alguna forma 'oficial' de cómo cargarla?

Respuesta

2

Intente utilizar una biblioteca.

Coloque su clase en la carpeta application/bibliotecas, a continuación, utilizar el cargador para cargarlo:

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

Absolutamente no, porque eso creará una nueva instancia de clase de usuario y no quiero tener ese objeto vacío en la memoria. Y, por supuesto, las clases de objetos resultantes no son bibliotecas en absoluto. – sasa

+0

El uso $ this-> cargar archivo() para cargar un archivo php que contiene sus clases –

0

No es exactamente lo que está pidiendo, pero a menudo utilizan 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; 
} 

y luego llame a $ this-> merge_object ($ this, $ data); desde __construct ($ data = array())

Cuando llama a una función de modelo ahora, también devuelve una instancia de la clase de modelo y puede acceder a cualquiera de sus métodos. Hace esencialmente lo que estás tratando de hacer.

Cuestiones relacionadas