Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

problemas con controladores y modelos

Estas en el tema de problemas con controladores y modelos en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola Les escribo ya que necesito de su ayuda, tengo lo siguiente: Una clase padre llamada controllerBase donde instancio la clase registry y la vista. ...
  #1 (permalink)  
Antiguo 21/05/2009, 23:11
 
Fecha de Ingreso: agosto-2008
Mensajes: 271
Antigüedad: 15 años, 9 meses
Puntos: 2
Pregunta problemas con controladores y modelos

Hola

Les escribo ya que necesito de su ayuda, tengo lo siguiente:
  • Una clase padre llamada controllerBase donde instancio la clase registry y la vista. Ademas tengo un par de metodos y es aqui donde tengo el problema, uno de los metodos lo quiero ocupar para cargar los modelos que le indique cada controlador, pero no me funciona. Pondré el codigo.

Código:
  
 public function ControllerBase()
    {
        $this->view     = new View();
		$this->registry = registry::singleton();
	}
	
	public function loadModel($_modelName)
	{
		self::ControllerBase(); //no se si eso estara bien pero llevo largo rato intentando que funcione y fue lo unico que se me ocurrio, quizas probocado por el cansancio mental y la fustracion que se ha hecho presente.
		
		$_modelNameFile = $this->registry->get('modelsFolder').$_modelName.'php';
		
		if (file_exists($_modelNameFile) && is_file($_modelNameFile))
		{
			require $this->registry->get('modelsFolder').$_modelName.'php';
			
			$this->model = & new $_modelName();
			
			return $this->model; // se supone que ahi retorno la instancia.
		}
		else
		{
		//mensaje : modelo no existe.
			return false;
		}
	}
  • El parametro del nombre del modelo se lo paso mediante el contructor del controlador a quien se esta invocando. Ahora quiero saber como hago para utilizar la instancia(modelo), ya que segun tengo entendido el constructor no retorna elementos. Utilizo el constructor de la clase hijo(itemsController) para llamar al metodo que retorna la instancia del modelo de la clase padre(controllerBase->loadModel()), esta bien?
  • Sera una alternativa utilizar la clase registry para registrar ese objeto y luego llamarlo desde el controlador.

La pregunta es como puedo utlizar la instancia del modelo que llamo desde el constructor de la clase hija a un metodo de la clase padre.

Espero se haya entendido



Saludos

Última edición por Fenris; 23/05/2009 a las 18:36
  #2 (permalink)  
Antiguo 22/05/2009, 00:26
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 1 mes
Puntos: 2534
Respuesta: problemas con controladores y modelos

no es necesaria la llamada al constructor dentro del método, porque el constructor ya fue ejecutado... cuando se instancia la clase...!!

ahora bien, has debug, imprime la variable $_modelNameFile para comprobar a ruta, ya que lo demás esta bien estructurado...

ah.. y evita usar el pase por referencia cuando instancias una clase, osea, antes del operador new ... no es necesario


me parece que al instanciar el modelo en $this en la clase padre, estas asignando un método al objeto en si... así, ya tenemos un método mas... y esto se hereda!


solo es necesario llamar al constructor, si se ejecuta el constructor hijo... para así, llamar al padre...

en este caso si la clase hijo tiene un constructor, y este no llama al constructor padre... no se hereda nada, en lo absoluto...

Código PHP:
class MiControlador extends ControllerBase {
  function 
MiControlador()
  {
  
// parent::ControllerBase(); 
   
$this->loadModel('mi_modelo');
  }
  function 
miMetodo()
  {
    
var_dump($this->mi_modelo);
  }

__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.

Última edición por pateketrueke; 22/05/2009 a las 00:35 Razón: dummy
  #3 (permalink)  
Antiguo 22/05/2009, 08:20
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: problemas con controladores y modelos

También te recomendaría no tener que guardarlo en una propiedad de la clase porque eso va a ser más complicado si necesitas cargar 2 o más modelos es mejor si regresas la instancia por completo así puedes tener:
Código php:
Ver original
  1. public function foo() {
  2.         $model1 = $this->loadModel('model1');
  3.         $model2 = $this->loadModel('model2');
  4. }

Saludos.
  #4 (permalink)  
Antiguo 23/05/2009, 18:36
 
Fecha de Ingreso: agosto-2008
Mensajes: 271
Antigüedad: 15 años, 9 meses
Puntos: 2
Respuesta: problemas con controladores y modelos

Hola

Gracias por su ayuda a ambos, pero me siguen surgiendo dudas.

¿Como sabe el controllador que modelo o modelos cargar?

por ej: el controllador para autentificar un usuario, como sabe que modelos debe cargar?

Saludos

Última edición por Fenris; 23/05/2009 a las 19:21
  #5 (permalink)  
Antiguo 24/05/2009, 15:28
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: problemas con controladores y modelos

Pues eso tu lo debes de programar, obviamente el controlador no puede "adivinar", que modelos cargar, tu lo debes de programar.

Saludos.
  #6 (permalink)  
Antiguo 25/05/2009, 10:52
Avatar de Genetix  
Fecha de Ingreso: febrero-2002
Ubicación: Lima - Perú
Mensajes: 1.600
Antigüedad: 22 años, 3 meses
Puntos: 45
Respuesta: problemas con controladores y modelos

Hola Fenris

Complementando lo que dice Gator.

Un modelo no esta sujeto a un controlador, puede ser usado por cualquier controlador y en un controlador puedes usar varios modelos.

Saludos
__________________
"El conocimiento nos hace responsables."
twitter: @benjamingb
blog personal: http://codigolinea.com
ZF Manual en español http://manual.zfdes.com
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:30.