Por que las variables no me funcionan al cargar una vista en otra vista "MVC" ?

  • Autor Autor YeltsinReyes
  • Fecha de inicio Fecha de inicio
YeltsinReyes

YeltsinReyes

Mi
Verificación en dos pasos activada
Verificado por Whatsapp
Verificado por Binance
Hola que tal, estoy tratando de hacerme una sencilla web usando "MVC", en el controlador puedo cargar una vista y pasarle un array
el cual lo convierto en variables usando la funcion extract(); el problema esta cuando cargo una vista dentro de otra vista usando el mismo metodo que use en el controlador, me carga el html bien pero las variables no me funcionan en esa vista.

Espero que me entiendan 😛

Ejemplo:

home.php
PHP:
<?php
class Home {

	public function vista($vista, $datos = false){

        if($datos != false){
            extract((array) $datos);
        }
        
        include('vistas/'.$vista.'.php');
    }

}
?>

Index.php
Cargo el home.php, llamo al metodo vista y a la vista home y le paso el array.
PHP:
<?php 

include('home.php');

$home= new Home();

$datos['titulo'] = 'Este es el titulo!';
$datos['footer'] = 'Este es el footer!';
$home->vista('home', $datos);

?>

vistas > home.php
Vista home.php donde puedo usar el arra convertido en variables y llamo la vista footer.php.
PHP:
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title><?php echo $titulo; ?></title>
</head>
<body>

<h1><?php echo $titulo; ?></h1>
	
<?php $this->vista('footer'); ?>

</body>
</html>

vistas > footer.php
En esta vista footer.php las variables no me funcionan!
PHP:
<footer><?php echo $footer; ?></footer>

En la vista home puedo llamar el footer directamente con un include('vistas/footer.php'); y las variable si funcionan en el footer.php
pero yo quiero usar el metodo de la clase home.

Alguna solucion para eso ???
 
Última edición:
Al llamar el 'Footer' te muestra el contenido? Porque igual en el 'home.php' no sabe que función es 'vista', ya que '$this' hace referencia al 'home.php' y no al index.php que es donde tienes declarado la clase. A parte que no le pasas ninguna 'dada' en el footer, fíjate que pones '$this->vista('footer',???)' no le pasas más variables, igual es por esto también.
Para verificarlo prueba de poner otro llamamiento al 'home.php' de la clase 🙂
 
Última edición:
Cómo le he visto en diferentes frameworks... Cuando se caga una vista parcial ... El método recibe el nombre de la vista y adicionalmente recibe un parámetro de variables que sería un array
 

Temas similares

Atrás
Arriba