2010-03-02 41 views
12

¿Por qué mi modelo no carga la biblioteca de cifrado?Cargar una biblioteca en un modelo en CodeIgniter

class User_model extends Model { 

    function User_model() { 
    parent::Model(); 
    $this->check_login(); 
    } 

    function check_login() { 
    $this->load->library('encrypt'); 
    $email = $this->encrypt->decode($email); 
    .... 
    } 
} 

Esto me da un error de PHP: Llamada a una función miembro de decodificación() en un no-objeto en la línea X - donde X es el this-> encrypt-> decodificación ($ email) $; ¿línea?

Editado para mostrar que el problema era que check_login fue llamado desde el constructor

Respuesta

5

estaba llamando check_login desde dentro del constructor, y que estaba causando los problemas.

La solución es llamar al $this->_assign_libraries(); justo después de cargar una biblioteca en un constructor.

Gracias a este hilo del foro codeignitor: http://codeigniter.com/forums/viewthread/145537/

+3

Sé que este hilo es muy antiguo, pero si ve esto, tenga en cuenta que la versión actual de CI le permite cargar Bibliotecas en Modelos sin ningún problema. –

20

No es necesario cargar la biblioteca en el modelo, modelos son siempre se llama desde los controladores por lo que sólo tiene que cargar las bibliotecas en el controlador, y ¡las funciones estarán disponibles en los modelos llamados por él!

Saludos,
Pedro

+10

Sí, pero cargar bibliotecas donde se necesiten minimiza los problemas de dependencia. – Summer

+1

Así que cárguelo en la función de controlador justo que llama al modelo – Pedro

+11

¡Qué idea tan horrible! ¡En serio, otro error de corto alcance del equipo de CodeIgniter! ¡Un modelo es un lugar perfecto para consumir una biblioteca de API que se ocupa de obtener datos de aplicaciones! ¡Forzarme a cargar una biblioteca en el controlador de la que depende una clase de Modelo subyacente! ¿Que demonios? ¡Tornillo que!Simplemente llame $ this -> _ assign_libraries(); ¡hecho! – Bretticus

3

Bibliotecas automáticamente deben ser asignados a la instancia de modelo por lo que debería funcionar bien.

Recuerde que si no puede acceder al superglobal, siempre puede usar $ ci = & get_instance() para tomarlo sin costo adicional para su memoria.

Pero aun así ... su ejemplo de código debería funcionar>. <

2

he probado muchos de ellos, pero al final, lo que hice es esto en un modelo:

$this->load->library('mylib'); 
$mylib= new Mylib(); 
$mylib->somemethod(); 

Esto funciona para mí.

0

es posible que desee cambiar el nombre del objeto de la biblioteca que va a cargar pd CI también tiene la clase cifrar

acaba de hacer

$this->load->library('encrypt',NULL,'myencryptobj'); 
$this->myencryptobj->yourfunction(); 

Esperanza esto ayuda

0

i También estaba enfrentando un problema sobre facebook api, luego probé required_once el archivo lib de facebook en el modelo. funcionó para mí.

require_once "application/libraries/facebook.php"; luego haga su objeto si lo necesita.

Cuestiones relacionadas