Foros del Web » Programando para Internet » PHP »

Front Controller

Estas en el tema de Front Controller en el foro de PHP en Foros del Web. Hola a todos, antiguamente hacia paginas web con una estructura que me dijieron que no sirve, se podia mejorar, en fin, y si al usar ...
  #1 (permalink)  
Antiguo 27/05/2015, 15:29
Avatar de fedefrankk  
Fecha de Ingreso: agosto-2007
Mensajes: 871
Antigüedad: 17 años, 3 meses
Puntos: 7
Pregunta Front Controller

Hola a todos, antiguamente hacia paginas web con una estructura que me dijieron que no sirve, se podia mejorar, en fin, y si al usar dicha estructura por hay era dificil volver al punto de partida... ejemplo.. de mi index.php iva a listados.php y de vuelta listado estaba arriba o abajo de mi index.. un desastre..
probe esta estructura.

Código PHP:
Ver original
  1. <?php include("BanerA.php");
  2.  
  3.      
  4.  
  5. if (empty($_SESSION['usemail'])) {
  6.  
  7.  
  8.  
  9. }else{
  10.    
  11.  
  12.  
  13. }
  14.      
  15.  
  16. if (empty($_GET)) {
  17.  
  18. include_once('galeria.php');
  19.  
  20.  
  21.  
  22. }else{
  23.  
  24. switch($_GET['page']){
  25. case 1:
  26. include_once('usuarios/registro.php');
  27. break;
  28. case "U":
  29. include_once('galeria.php');//inicio
  30. break;
  31. case "unia":
  32. include_once("includes/portada.php");
  33. include_once('unimevmuestra/unim.php');
  34. break;
  35.  
  36.  
  37. }
  38. }
  39.  
  40. ?>

y la postee en este foro, me dio la solucion y me dijo fron controller, he buscado y ami se me hace complicado entender un poco... me dio un tutorial pero la web no funciona, he buscado en google y casi todo en ingles o todos los tutos a la mitad...

Alguien si es tan amable me podria dar una mano con este tema?

Desde ya muchas gracias a todos
fede
  #2 (permalink)  
Antiguo 27/05/2015, 18:17
 
Fecha de Ingreso: abril-2015
Ubicación: Bogotá D.C - Colombia
Mensajes: 106
Antigüedad: 9 años, 7 meses
Puntos: 11
Respuesta: Fron Controller

Hola amigo mira lo que quieres y te dijeron es que trabajaras MVC(Modelo vista controlador), generalmente es muy usado para crear sistemas complejos y con una muy buena estructura.

y es simple supongamos que tienes un index.html

la vista se trabaja con jquery y peticiones AJAX, si no tienes muy claro el tema simplemente busca tutoriales, no te arrepentirás creeme será una gran manera de iniciar correctamente cualquier aplicación pues trabajar con MVC tiene muchas ventajas, entre estas como más importantes el "rendimiento".

Aún así te dejaré un pequeño tutorial aquí:

Inicialmente este sería el index.html

Código PHP:
<!DOCTYPE html>
<!--
To change this license headerchoose License Headers in Project Properties.
To change this template filechoose Tools Templates
and open the template in the editor.
-->
<
html>
    <
head>
        <
title>Ejemplo MVC</title>
        <
meta charset="UTF-8">
        <
meta name="viewport" content="width=device-width">
        <
script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
        <script>
            $(document).ready(function() {
                $('#decirHola').click(function() { //Se agrega un evento al botón Hola, y se realiza la petición.
                    $.ajax({
                        url: 'Controller.php',
                        type: 'POST',
                        data: 'request="decirHola"',
                        success: function(data) {
                            console.log(data); //Solo para que veas que pasa en consola ;)
                            var respuesta = JSON.parse(data);
                            console.log(respuesta); //Solo para que veas que pasa en consola ;)
                            if (respuesta.codigo == 1) {
                                $('#contenidoRespuesta').html(respuesta.datos);
                            } else {
                                alert(respuesta.mensaje);
                            }
                        }
                    });
                });


                $('#decirAdios').click(function() {
                    $.ajax({
                        url: 'Controller.php',
                        type: 'POST',
                        data: 'request="decirAdios"',
                        success: function(data) {
                            console.log(data); //Solo para que veas que pasa en consola ;)
                            var respuesta = JSON.parse(data);
                            console.log(respuesta); //Solo para que veas que pasa en consola ;)
                            if (respuesta.codigo == 1) {
                                $('#contenidoRespuesta').html(respuesta.datos);
                            } else {
                                alert(respuesta.mensaje);
                            }
                        }
                    });
                });
                
                $('#error').click(function() {
                    $.ajax({
                        url: 'Controller.php',
                        type: 'POST',
                        data: 'request="error"',
                        success: function(data) {
                            console.log(data); //Solo para que veas que pasa en consola ;)
                            var respuesta = JSON.parse(data);
                            console.log(respuesta); //Solo para que veas que pasa en consola ;)
                            if (respuesta.codigo == 1) {
                                $('#contenidoRespuesta').html(respuesta.datos);
                            } else {
                                alert(respuesta.mensaje);
                            }
                        }
                    });
                });
            });
        </script>
    </head>
    <body>
        <div id="contenidoRespuesta">
            <i>Aquí se cargará el contenido que me de el controlador(Controller.php).</i>
        </div>
        <br/>
        <button id="decirHola">Hola</button>
        <button id="decirAdios">Adiós</button>
        <button id="error">EJ: ERROR de petición</button>
        <br/>
        <hr/>
        Es posible que encuentres muchos tutoriales, y como lo dijiste algunos no se extienden a 
        crear toda la estructura como te la planteo aquí en unos ejemplos muy sencillos para que 
        puedas ver como se hace ;)
    </body>
</html> 

Por otra parte este sería el Controller.php


Código PHP:

<?php

/*
 * Generalmente se crea un controlador que recibirá las peticiones, y se encargará
 * de servirle al fromten para que reciba lo que necesita.
 */


if (!empty($_POST['request'])) {
    
$request $_POST['request'];
    
$request toString($request); //Elimino comillas de la cadena.
    
$response = array();
    switch (
$request) {
        case 
'decirHola':
            
$response['codigo'] = 1//Código de la solicitud, generalmente para validar si todo salio bien, por ejemplo si haces una consulta que retorna datos vacios pues simple retornas un codigo con 0, que representaria eso, si es un error podria ser un -1.
            
$response['mensaje'] = "Todo salio bien."//Lo que quieras, si todo salio bien, si se produjo un error, lo que sea que desees imprimir en pantalla, si no vas a usar no importa.
            
$response['datos'] = "Hola";
            echo 
json_encode($response);
            break;
        case 
'decirAdios':
            
$response['codigo'] = 1//Código de la solicitud, generalmente para validar si todo salio bien, por ejemplo si haces una consulta que retorna datos vacios pues simple retornas un codigo con 0, que representaria eso, si es un error podria ser un -1.
            
$response['mensaje'] = "Todo salio bien."//Lo que quieras, si todo salio bien, si se produjo un error, lo que sea que desees imprimir en pantalla, si no vas a usar no importa.
            
$response['datos'] = "Adios";
            echo 
json_encode($response);
            break;
        default :
            
//Como lo observas a continuación imprimiré un json con codigo -1 para saber que se produjo un error.
            
$response['codigo'] = -1//Código de la solicitud, generalmente para validar si todo salio bien, por ejemplo si haces una consulta que retorna datos vacios pues simple retornas un codigo con 0, que representaria eso, si es un error podria ser un -1.
            
$response['mensaje'] = "No existe el requisito."//Lo que quieras, si todo salio bien, si se produjo un error, lo que sea que desees imprimir en pantalla, si no vas a usar no importa.
            
$response['datos'] = null;
            echo 
json_encode($response);
            break;
    }
} else {
    
}

function 
toString($string) { //He creado esta función por que al recibir la petición, y comparar el string recibido dentro del swich haría algo como peticionHacerAlgo = "peticionHacerAlgo" que retornaria false, por tanto elimino los "" de la cadena.
    
$stringTemp $string;
    
$string "";
    for (
$i 0$i strlen($stringTemp); $i++) {
        if (
$stringTemp[$i] != '"') {
            
$string .= $stringTemp[$i];
        }
    }
    return 
$string;
}

?>


Generalmente con esto puedes ver de una manera casí completa como se hace, aquí generalmente solo tendrias que hacer que en el swich se incluyan las clases o funciones php que necesitas para cada debido caso, suponiendo que sabes como hacer las consultas y demás cosas de BD, así más o menos es que se trabaja el tema...

Éxitos!
  #3 (permalink)  
Antiguo 28/05/2015, 16:42
Avatar de fedefrankk  
Fecha de Ingreso: agosto-2007
Mensajes: 871
Antigüedad: 17 años, 3 meses
Puntos: 7
Respuesta: Front Controller

Hola.!! muchas gracias por tu tiempo, he leido todo lo que escribiste voy a ver de aprovechar toda tu explicacion y si sale alguna duda preguntare e nuevo.

Muchas mgracias enserio por tu tiempo.!!!

Saludos y agradecido.

Fede
  #4 (permalink)  
Antiguo 29/05/2015, 12:13
Avatar de fedefrankk  
Fecha de Ingreso: agosto-2007
Mensajes: 871
Antigüedad: 17 años, 3 meses
Puntos: 7
Pregunta Respuesta: Front Controller

Hola, estuve leyendo un poco, es complicadao... tengo una pregunta.

si yo en el ejemplo que me pasaste (agradecido!!) quiero empezar a poner mi index de verdad odea mi wen inicial.. tendria que ser asi?


<div id="contenidoRespuesta">
<i><?php include: cabecera.php ?></i>
</div>

o lo trendria que incluir en el Controller.php? y si es asi... donde?

Saludos y gracias
Pd: me estoy sacado las dudas espero que se entienda.

saludo a todos
fede
  #5 (permalink)  
Antiguo 30/05/2015, 11:00
 
Fecha de Ingreso: abril-2015
Ubicación: Bogotá D.C - Colombia
Mensajes: 106
Antigüedad: 9 años, 7 meses
Puntos: 11
Respuesta: Front Controller

Pues de la manera en que lo planteas, espero entender bien, me estás diciendo que deseas cargar en el div contenedor la página cabecera.php, pues generalmente puedes hacerlo tal cual como lo estás haciendo solo con php.
pero te recomendaría que manejaras el controller, generalmente solo tendrías que agregar en el swich del controller una nueva opción por decirlo de alguna manera, ej:

Código PHP:
swich($request){
   case 
'opcion1'//Suponiendo que estas son las opciones que ya tienes.
   
break;
   case 
'cabeceraInicial'//Agregamos la nueva opción
       
include 'cabecera.php'//Suponiendo que esta cabecera genera html, o contiene html.
       //Yo en verdad siempre prefiero usar archivos (*.html) si mostraré contenido estático, si 
       //deseo mostrar listas o algo así consultadas de la base de datos, creo una estructura de objetos, 
//generalmente lo que se llama entidades o clases modelo de la base datos(VO en JAVA, no sé que concepto le dan los programadores php ;-)), esto lo hago por //ejemplo consultando los datos de la base de datos, creando un array con los 
//datos de la misma, modelados previamente con la clase que representa la tabla y luego retorno el array en JSON
//con json_decode(array) de esta manera con javascript creo el contenido de la página, lo cual le dará una estructura mucho más rápida 
//y flexible a cambios, por ejemplo que desees a futuro cambiar el lenguaje del backent a JAVA.
   
break;

Código PHP:
<script>
//Y por la parte del index, en donde vas a cargar y llamar la opción nueva que has creado en el controller, 
//simplemente haces lo mismo que ya te habia compartido 
//inicialmente, en donde ya no deberías usar un evento onclik sobre un elemento, como lo hicimos, si no sobre el documento.

//aprovechando la función ready de Jquery puedes hacer esto:

$(document).ready(function(){ //Al cargar el documento?
$.ajax({ 
                        
url'Controller.php'
                        
type'POST'
                        
data'request="cabeceraInicial'
                        
success: function(data) { 
                                $(
'#contenidoRespuesta').html(data); 
                        } 
                    }); 
})
</script> 

IMPORTANTE - Opción más factible para cargar páginas en un contenedor
En verdad no sé que puedas estár haciendo, y por tanto te explique más o menos lo que entendí de tu pregunta, generalmente
Si solo necesitas cargar una página html, o php dentro del div contenedor(contenidoRespuesta), solo tienes que hacerlo con AJAX y no es necesario
usar el controlador, generalmente en el ready que declaré anteriormente la petición sería esta::

Código PHP:

$.ajax({ 
                        
url'paginaQueQuieroCargar.php',  //La página que deseas cargar, con la ruta de carpeta y todo como sea necesario.
                        
type'POST'//No contiene ningún dato, a menos que quieras enviar un id, o algo por el estilo para que la página haga algo en especifico.
                        //data:"dato1=2&dato2='jhonjaider1000'", si necesitas enviar datos solo envias todo lo que necesitas tal cual como si lo insertaras en la url, como el ejemplo <<.
                        
success: function(data) { 
                                 
//De esta manera solo recargas el contenido generado
                                
$('#contenidoRespuesta').html(data); 
                        },
                        
error:function(error){ //Como es posible que des una url invalida o algo así, se implementa la captura del error, aquí solo podría ser que la página no exista.
                         
$('#contenidoRespuesta').html('<h1>Error 404, </h1><h3>No se encontró la página</h3>');
                        }
                    }); 
//Por el momento si no sabes como va el tema, consulta un poco sobre esto, cualquier cosa pregunta en los foros, y como recomendación te paso un tema que han posteado durante bastante tiempo y contiene muchas cosas que te prodrían servir, incluso en tu caso algo para chicos que están perfeccionando o desean conocer el tema de programación orientada a objetos (POO).

http://www.forosdelweb.com/f18/aport...as-php-569025/

Éxitos!

Última edición por jhonjaider1000; 30/05/2015 a las 11:26

Etiquetas: controller, registro, usuarios
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 14:44.