Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Un solo controlador php

Estas en el tema de Un solo controlador php en el foro de PHP en Foros del Web. Hola a todos de nuevo, estaba trabajando en unos ejercicios bastantes simples para practicar un poco y de repente me ha surgido una duda, tengo ...
  #1 (permalink)  
Antiguo 15/10/2014, 17:07
Avatar de cascanfer56  
Fecha de Ingreso: octubre-2014
Mensajes: 9
Antigüedad: 9 años, 6 meses
Puntos: 0
Pregunta Un solo controlador php

Hola a todos de nuevo, estaba trabajando en unos ejercicios bastantes simples para practicar un poco y de repente me ha surgido una duda, tengo un formulario que hace un insert en una tabla y otra página que muestra los registros.Bien pues estaba practicando con el modelo vista controlador para organizar proyectos (que nunca uso, suelo usar mucho código embebido y referencias a archivos directos) y tengo varios "controladores" además de las "vistas" y los "modelos" mi pregunta es: se puede tener un único controlador, es decir como haría para referencia en un único "controlador.php" las diferentes llamadas de los formularios etc?

mmm creo que me esta costando un poquito explicarme os pongo los controladores y la cosa sería que quedase solo 1, que aunque fuese llamado por varios formularios por ejemplo , fuese mándando y devolviéndo datos a sus respectivos modelos ,vistas.

Un formulario de ejmplo:
Código HTML:
Ver original
  1. <form action="../controlador/controlador1.php" name="formulario" method="POST" onsubmit="return validar()">
  2.                             <select name="opcion">
  3.                                 <option value="1">Nuevo producto</option>
  4.                                 <option value="2">Lista pedidos</option>    
  5.                             </select>
  6.                             <input type="submit" value='go' >
  7.                         </form>

controlador1
Código PHP:
require '../modelo/opciones.php';
opciones.leerOpciones(); 
formulario 2
Código HTML:
Ver original
  1. <form action="../modelo/controlador2.php" name="formulario" method="POST" onsubmit="return validar()">
  2.                             <input type="text" name="descripcion">
  3.                             <input type="text" name="stock">
  4.                             <input type="submit" value='nuevo pedido'>
  5.                         </form>
controlador 2
Código PHP:
require 'producto.php';
producto.insert(); 
Como veis son códigos muy sencillos simplemente para ejemplificar la idea.Cada controlador llama a las funciones de los "modelos".
En el 1er caso es para redireccionar a x o y página dependiendo de la opción seleccionada en el formulario y en el 2º el insert a la tabla.

Alguna idea? Si alguien puede explicarme un poco la respuesta,o alguna pista, que me vendría bien para ir quedándome con la idea,porque tengo la sensación de que debería saber hacerlo pero no acabo de arrancar :)

Muchas gracias!!
  #2 (permalink)  
Antiguo 15/10/2014, 17:21
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Un solo controlador php

Claro que se puede tener un único controlador, el concepto se llama: frontController.

La idea, desde luego, es que dicho controlador sea capaz de recibir un argumento y dado el valor cargue otro controlador, etc.

Código PHP:
Ver original
  1. function sub($name) {
  2.   $ctrl_file = "/path/to/controllers/$name.php";
  3.  
  4.   if (is_file($ctrl_file)) {
  5.     return $ctrl_file;
  6.   }
  7. }
  8.  
  9. $controller = $_GET['ctrl'];
  10.  
  11. if ($file = sub($controller)) {
  12.   require $file;
  13. }

Para el action del formulario:
Código HTML:
Ver original
  1. <form action="front-controller.php?ctrl=other">

¿Se entiende?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 16/10/2014, 11:18
Avatar de cascanfer56  
Fecha de Ingreso: octubre-2014
Mensajes: 9
Antigüedad: 9 años, 6 meses
Puntos: 0
Respuesta: Un solo controlador php

Cita:
Iniciado por pateketrueke Ver Mensaje
Claro que se puede tener un único controlador, el concepto se llama: frontController.

La idea, desde luego, es que dicho controlador sea capaz de recibir un argumento y dado el valor cargue otro controlador, etc.

Código PHP:
Ver original
  1. function sub($name) {
  2.   $ctrl_file = "/path/to/controllers/$name.php";
  3.  
  4.   if (is_file($ctrl_file)) {
  5.     return $ctrl_file;
  6.   }
  7. }
  8.  
  9. $controller = $_GET['ctrl'];
  10.  
  11. if ($file = sub($controller)) {
  12.   require $file;
  13. }

Para el action del formulario:
Código HTML:
Ver original
  1. <form action="front-controller.php?ctrl=other">

¿Se entiende?
Fantástico!! justo el empujoncito que necesitaba! controlador preparado, muchas gracias por el inciso de frontController así he podido buscar cositas, que no sabía que poner en google

Me ha gustado mucho el método,de echo he visto algunos otros, pero me quedo con tu idea, es rápido, sencillo, limpio y de paso recupero un poquito los métodos GET que los tenía abandonados ^^.

Mil gracias

Etiquetas: controlador, formulario, registro, select, tabla
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 05:30.