MVC: un controller y view por formulario?

  • Autor Autor giulichajari
  • Fecha de inicio Fecha de inicio
giulichajari

giulichajari

Gamma
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Hola amigos, desde mi index.php llamo a distintas opciones usando mvc.

Por ejemplo clientes: lista los clientes con listarcliente.php. Pero ahi tengo editar y nuevo cliente.

La pregunta es: tengo que crear un clientecontroller.php y un vistaagregar.php y vistaeditar.php, con su modulo..

Y lo mismo para articulos, nuevoticket, etc?
 
hola amigo cuentame un poco mas sobre tu problema me imagino yo que hablas de laravel se bastante sobre laravel y me imagino estas hablando del backend de tu pagina si necesitas agregarle botones en esas listas para que cuando clickees el controlador que crees reciba por metodo post o get el id del articulo y mostrar la vista .... recuerda que cuando vas a mostrar una vista laravel primero busca el controlador ejecuta los procesos que tenga dicho controlador y luego va a la vista que cuando vaya a ser mostrada tienes que colocar en el controlador los campos que tiene la base de datos por medio de compact a la view si necesitas saber mas necesito mas informacion amigo
 
hola amigo cuentame un poco mas sobre tu problema me imagino yo que hablas de laravel se bastante sobre laravel y me imagino estas hablando del backend de tu pagina si necesitas agregarle botones en esas listas para que cuando clickees el controlador que crees reciba por metodo post o get el id del articulo y mostrar la vista .... recuerda que cuando vas a mostrar una vista laravel primero busca el controlador ejecuta los procesos que tenga dicho controlador y luego va a la vista que cuando vaya a ser mostrada tienes que colocar en el controlador los campos que tiene la base de datos por medio de compact a la view si necesitas saber mas necesito mas informacion amigo
Estoy programando todo de cero amigo..

Pero debe ser el mismo principio.!

Enviado desde mi SM-G530M mediante Tapatalk
 
Hola [MENTION=157498]giulichajari[/MENTION]; 🙂, estás utilizando mal el planteo de MVC.

En principio es un CONTROLADOR por MODELO. ¿Que significa esto? Que en tu caso tendrías el ClienteController para el modelo de Cliente (Que supongo es una clase..), y dentro de ese controlador tenes para editar, agregar, listar, etc.

Las vistas las llamas desde los controladores.

Saludos! :encouragement:
 
Hola [MENTION=157498]giulichajari[/MENTION]; 🙂, estás utilizando mal el planteo de MVC.

En principio es un CONTROLADOR por MODELO. ¿Que significa esto? Que en tu caso tendrías el ClienteController para el modelo de Cliente (Que supongo es una clase..), y dentro de ese controlador tenes para editar, agregar, listar, etc.

Las vistas las llamas desde los controladores.

Saludos! :encouragement:

Claro tengo una clase Cliente en un script aparte..y quiero que aparezca la lista de clientes, eso seria un view.cliente llamado desde el clientecontroller?

Por otro lado en template.php que es la plantilla que carga el index.php incluyo navegacion.php que tiene un menu desplegable..al hacer click en cualquiera de las opciones se cambia el contenido de abajo y el menu sigue quedando tal cual lo necesito. Pero queda sin desplegarse se ven los titulos nomas!! porque?

PHP:
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
<link rel="stylesheet" type="text/css" href="../gestionweb/css/stylos.css"/>
</head>
<body>
<?php
 require('views/modules/navegacion.php');?>
<section>
<?php
$mvc = new MvcController();
$mvc -> enlacesPaginasController();

?>
</section>
</body>
</html>

HTML:
<nav class="dropdownmenu">
  <ul>
    <li><a href="">ABM</a>
    <ul id="submenu">
        <li><a href="index.php?action=listarCliente">Clientes</a></li>
        <li><a href="">Articulos</a></li>
        <li><a href="">Proveedores</a></li>
      </ul>
    </li>
    <li><a href="">Nuevo comprobante</a>
    <ul id="submenu">
        <li><a href="index.php?action=nuevoTicket">Ticket</a></li>
        <li><a href="">Factura A</a></li>
    </ul>
    </li>
    <li><a href="#">Estado de cajas</a>
      <ul id="submenu">
        <li><a href="">Chequera</a></li>
        <li><a href="">Cerrar caja</a></li>
        <li><a href="">Posnet</a></li>
      </ul>
    </li>
    <li><a href="">Busqueda Padron</a></li>
    <li><a href="">Compra de stock</a></li>
  </ul>

</nav>
 
Claro tengo una clase Cliente en un script aparte..y quiero que aparezca la lista de clientes, eso seria un view.cliente llamado desde el clientecontroller?

Por otro lado en template.php que es la plantilla que carga el index.php incluyo navegacion.php que tiene un menu desplegable..al hacer click en cualquiera de las opciones se cambia el contenido de abajo y el menu sigue quedando tal cual lo necesito. Pero queda sin desplegarse se ven los titulos nomas!! porque?

PHP:
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
<link rel="stylesheet" type="text/css" href="https://forobeta.com/../gestionweb/css/stylos.css"/>
</head>
<body>
<?php
 require('views/modules/navegacion.php');?>
<section>
<?php
$mvc = new MvcController();
$mvc -> enlacesPaginasController();

?>
</section>
</body>
</html>

HTML:
<nav class="dropdownmenu">
  <ul>
    <li><a href="">ABM</a>
    <ul id="submenu">
        <li><a rel="nofollow" href="index.php?action=listarCliente">Clientes</a></li>
        <li><a href="">Articulos</a></li>
        <li><a href="">Proveedores</a></li>
      </ul>
    </li>
    <li><a href="">Nuevo comprobante</a>
    <ul id="submenu">
        <li><a rel="nofollow" href="index.php?action=nuevoTicket">Ticket</a></li>
        <li><a href="">Factura A</a></li>
    </ul>
    </li>
    <li><a href="#">Estado de cajas</a>
      <ul id="submenu">
        <li><a href="">Chequera</a></li>
        <li><a href="">Cerrar caja</a></li>
        <li><a href="">Posnet</a></li>
      </ul>
    </li>
    <li><a href="">Busqueda Padron</a></li>
    <li><a href="">Compra de stock</a></li>
  </ul>

</nav>

Exacto, todas las views que sean del modelo Cliente, las tenes que llamar desde el controlador del mismo modelo, en este caso ClienteController.

Por otro lado, proba cambiando los ids de los elementos, ya que le estas asignando el mismo id (submeno) a 3 elementos distintos. Proba poniendole submenu1, submenu2, submenu3
 
Exacto, todas las views que sean del modelo Cliente, las tenes que llamar desde el controlador del mismo modelo, en este caso ClienteController.

Por otro lado, proba cambiando los ids de los elementos, ya que le estas asignando el mismo id (submeno) a 3 elementos distintos. Proba poniendole submenu1, submenu2, submenu3

es que ese id esta definido en una hoja de estilos..es el mismo submenu en todo caso, deberia ser una clase entonces?

- - - Actualizado - - -

Exacto, todas las views que sean del modelo Cliente, las tenes que llamar desde el controlador del mismo modelo, en este caso ClienteController.

Por otro lado, proba cambiando los ids de los elementos, ya que le estas asignando el mismo id (submeno) a 3 elementos distintos. Proba poniendole submenu1, submenu2, submenu3

lo cambie a clase y funciono pero me deja un espacio entre el titulo del menu y el submenu

HTML:
.submenu {
	left: 0;
	opacity: 0;
	position: absolute;
	top: 35px;
	visibility: hidden;
	z-index: 1;
    width: 100%;
}
li:hover ul.submenu {
	opacity: 1;
	top: 40px;
	visibility: visible;
}
.submenu li {
	float: none;
	width: 100%;
}
.submenu a:hover {
	background: #DF4B05;
}
.submenu a {
	background-color:#000000;
}
 
es que ese id esta definido en una hoja de estilos..es el mismo submenu en todo caso, deberia ser una clase entonces?

- - - Actualizado - - -



lo cambie a clase y funciono pero me deja un espacio entre el titulo del menu y el submenu

HTML:
.submenu {
	left: 0;
	opacity: 0;
	position: absolute;
	top: 35px;
	visibility: hidden;
	z-index: 1;
    width: 100%;
}
li:hover ul.submenu {
	opacity: 1;
	top: 40px;
	visibility: visible;
}
.submenu li {
	float: none;
	width: 100%;
}
.submenu a:hover {
	background: #DF4B05;
}
.submenu a {
	background-color:#000000;
}

Sacale el "top: 35px" a .submenu
 
funciono pero queda un espacio igualmente como si el menu estuviera desplegado, osea entre el menu y el resto de la pagina..perdona mi ignorancia
 
Probalo así:

Insertar CODE, HTML o PHP:
.submenu {
	left: 0;
	opacity: 0;
        display: none;
	top: 35px;
	z-index: 1;
    width: 100%;
}

li:hover ul.submenu {
	display: block;
	top: 40px;
}
 
En controller tengo esto

PHP:
<?php
class MvcController{

	#LLAMADA A LA PLANTILLA
	#----------------------------------------------

	public function plantilla(){

		#include() Se utiliza para invocar el archivo que contiene código html.
       
		include "views/template.php";
	}

	#INTERACCIÓN DEL USUARIO
	public function enlacesPaginasController(){

		if(isset($_GET["action"])){

		$enlacesController = $_GET["action"];

		}

		else{

		$enlacesController = "inicio";
			
		}

		$respuesta = EnlacesPaginas::enlacesPaginasModel($enlacesController);

		include_once $respuesta;

	}
}
?>

la respuesta viene del modelo:

PHP:
<?php

class EnlacesPaginas{

	public function enlacesPaginasModel($enlacesModel){

		if($enlacesModel == "listarCliente" || 
		   $enlacesModel == "nuevoTicket" || 
		   $enlacesModel == "contactenos"){
            
			$module = "views/modules/".$enlacesModel.".php";

		}

		else if($enlacesModel == "index" ){

			$module = "../gestionweb/views/modules/inicio.php";

		}

		else{

             

			$module = "../gestionweb/views/modules/inicio.php";

		}

		return $module;

	}

}

?>

entonces se me ocurre

PHP:
<?php
class ClienteController{

	#LLAMADA A LA PLANTILLA
	#----------------------------------------------

	public function plantilla(){

		#include() Se utiliza para invocar el archivo que contiene código html.
       
		include "views/module/listarCliente.php";
	}

	#INTERACCIÓN DEL USUARIO
	public function enlacesClienteController(){

		if(isset($_GET["action"])){

		$enlacesController = $_GET["action"];

		}

		else{

		$enlacesController = "inicio";
			
		}

		$respuesta = EnlacesCliente::enlacesPaginasClientes($enlacesController);

		include_once $respuesta;

	}
}
?>

PHP:
<?php

class EnlacesCliente{

	public function enlacesPaginasClientes($enlacesModel){

		if($enlacesModel == "agregar" || 
		   $enlacesModel == "editar"){
            
			$module = "views/modules/".$enlacesModel.".php";

		}

		else if($enlacesModel == "index" ){

			$module = "../gestionweb/views/modules/inicio.php";

		}

		else{

             

			$module = "../gestionweb/views/modules/inicio.php";

		}

		return $module;

	}

}?>

y en el controller pondria un include de claseCliente.php

PHP:
<?php
require_once ("/../includes/claseConexion.php");
class Cliente{
   private $conexion;
   private $stm; 
   private $CUIT;
   private $nombreyapellido;
   private $domicilio;
   private $ciudad;
   private $telfijo;
   private $cel;
   private $cativa;
   
public function Listar()
	{
		try
		{
            $conexion = Conexion::singleton_conexion();
			

			$stm=$conexion->prepare("SELECT * FROM cliente;");
		      $stm->execute();

			return $stm->fetchAll(PDO::FETCH_OBJ);
         
		          
		}
		catch(Exception $e)
		{
			die($e->getMessage());
		}
	}

	public function Obtener($id)
	{
		try 
		{
			$stm = $this->pdo
			          ->prepare("SELECT * FROM cliente WHERE id = ?");
			          

		//	$stm->execute(array($id));
			return $stm->fetch(PDO::FETCH_OBJ);
		} catch (Exception $e) 
		{
			die($e->getMessage());
		}
	}

	public function Eliminar($id)
	{
		try 
		{
			$stm = $this->pdo
			            ->prepare("DELETE FROM cliente WHERE id = ?");			          

			$stm->execute(array($id));
		} catch (Exception $e) 
		{
			die($e->getMessage());
		}
	}

	public function Actualizar($data)
	{
		try 
		{
			$sql = "UPDATE cliente SET 
						dni      		= ?,
						Nombre          = ?, 
						Apellido        = ?,
                        Correo        = ?,
                        Telefono        = ?
						
				    WHERE id = ?";

			$this->pdo->prepare($sql)
			     ->execute(
				    array(
				    	$data->dni, 
                        $data->Nombre,                        
                        $data->Apellido,
                         $data->Correo,
                        $data->telefono, 
                        $data->id
					)
				);
		} catch (Exception $e) 
		{
			die($e->getMessage());
		}
	}

	public function Registrar(cliente $data)
	{
		try 
		{
		$sql = "INSERT INTO cliente (dni,Nombre,Apellido,Correo,telefono) 
		        VALUES (?, ?, ?, ?, ?)";

		$this->pdo->prepare($sql)
		     ->execute(
				array(
					 $data->dni, 
                    $data->Nombre,
                    $data->Apellido, 
                    $data->Correo, 
                     $data->telefono 
                   
                )
			);
		} catch (Exception $e) 
		{
			die($e->getMessage());
		}
	}
}

?>
 
Atrás
Arriba