Por que as variáveis não funcionam ao carregar uma view em outra view "MVC" ?

  • Autor Autor YeltsinReyes
  • Data de início Data de início
Tradução em andamento: em alguns minutos este tópico estará em português. Por enquanto, o conteúdo está no original em espanhol. Ver original
YeltsinReyes

YeltsinReyes

Mi
Verificación en dos pasos activada
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 edição:
Foi útil? Participe da conversa

Com sua conta grátis você pode responder, mandar mensagem privada ao autor e comprar com Saldo retido: o pagamento é liberado quando você recebe o combinado.

Leva 30 segundos · você volta a este tópico ao terminar
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 edição:
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
 

Tópicos similares

Voltar
Topo