2010-04-27 13 views

Respuesta

4

Ver el hilo:

View Calling a Model

Por cierto ¿por qué necesita para acceder a la model del view, puede enviar los datos del modelo a la vista desde la controller también que es lo habitual y mejor enfoque.

Como una buena nota, mantenga su lógica de procesamiento fuera de la vista, en su lugar debe usar controller.

+6

nadas aquí observa que no es procesado en la vista. En MVC, la vista tiene acceso al modelo. Ver: http://www.phpwact.org/pattern/model_view_controller –

+0

¿está bien entonces cómo puedo acceder a 3 tablas usando el método del modelo de controlador? Tuve que seleccionar datos de 3 tablas y todos ellos dependen del valor generado a partir de la primera consulta, ¿hay alguna otra manera fácil, tuve éxito al crear una combinación en 2 tablas pero ninguna idea en 3 tablas se une, alguna sugerencia? – sonill

+2

Enlace roto. Codeigniter cambió sus foros. – Goose

5

CodeIgniter's $this->load->model() no devuelve absolutamente nada. Míralo: system/libraries/Loader.php.

Esta es la salida absolutamente nada:

$model = $this->load->model('table'); 

print_r($model); 

Y el siguiente ejemplo le dará el error fatal Call to a member function some_func() on a non-object:

$model = $this->load->model('table'); 

$model->some_func(); 

No importa si aún existe esa función, no es $model un objeto.

Lo que hay que hacer es tener un método en su modelo que devuelve datos, a continuación, llamar a esa función y pasar los resultados a su archivo de vista:

$this->load->model('table'); 
$data = $this->table->some_func(); 
$this->load->view('view', $data); 

PS: ¿Cómo es la única respuesta que ha aceptado lo absolutamente incorrecto que hacer?

+0

@ bschaeffer - Estoy cargando un modelo que después de llamar a la función. pero me da un error "Llamar a una función de miembro addPost() en un no-objeto" –

+0

hay una manera de hacerlo que encontré por accidente, pero es un todo de seguridad para hacerlo, los modelos se suponen manejan accediendo al base de datos y organizando los datos, el controlador debe manejar cualquier tipo de lógica de manipulación de datos, y es un intermedio entre la vista y los modelos, esto ayuda a evitar el acceso directo a sus datos desde páginas públicas y centraliza y manipula los datos. disminuyendo el tiempo que lleva depurar – John

1

Dado que $ model no es un objeto, puede realizar una llamada al modelo "tabla" utilizando el operador de resolución de alcance "::", que puede llamar a la función de la clase sin ninguna instancia de objeto.

$this->load->model('table'); 
table::some_funct(); 

Nota: también es necesario para hacer que la función "some_funct" estática dentro de su modelo de "mesa".

0

Hey. Puede acceder desde la vista a los modelos del mismo modo al que accede en su controlador. Recuerde que el acceso de vista a los modelos que importan su controlador.

12

Cargar un modelo en el controlador

$this->load->model('yourmodel'); 

Asignar este modelo a un var como esto

$data['model_obj'] = $this->yourmodel; 

y asignar esta matriz de datos a su plantilla de vista

Uso $ model_obj objeto en la plantilla de vista para llamar a los métodos del modelo

$model_obj->some_method() 

Espero que esto ayude ...

+0

Exactamente lo que estaba buscando. Funciona perfecto! – Gereltod

0

en el UML original que he visto para la arquitectura MVC, ver los métodos de llamadas en el modelo ..

http://www.as3dp.com/wp-content/uploads/2010/02/mvc_pope_krasner.png

..pero en la práctica con las aplicaciones PHP, porque no hay persistencia para realizar un seguimiento de los cambios de estado de objetos entre peticiones (o al menos no de manera eficiente), creo que es mejor mantener todo método de modelo requiere en Controlador y pase el resultado para ver si es posible.

-1

Puede acceder de manera básica a un método desde view en codeingiter.

public function index() 
{ 

    $this->load->model('persons'); 
    $data['mydata'] = $this->persons->getAllSessionData(); 
    $this->load->view('test_page', $data); 
} 

en vista

print_r ($mydata); 

mi función devuelve una matriz.

+0

No accede al modelo desde la vista. Usted accede desde el controlador y proporciona la salida a la vista. No es lo que pide el autor de la pregunta. – DescampsAu

4

Puede utilizar siguiente código:

$ci =&get_instance(); 
    $ci->load->model(your model); 
    $ci->(your model)->(your function);  
    Note: You have to call your model in your controller.Its working fine 
+1

Gracias hermano .. @ Pritam Chaudhari –

Cuestiones relacionadas