Foros del Web » Programando para Internet » PHP »

Está bien el ejemplo de MVC?

Estas en el tema de Está bien el ejemplo de MVC? en el foro de PHP en Foros del Web. Hasta donde se esto podría ser MVC: Controller: Código: <?php require __DIR__ . '/../classes/class.routing.php'; $controll = new Routing; $controll->get_model($_GET['page']); $model = new IndexModel(); $model->get_page($_GET['page']); $controll->get_view($_GET['page']); ...
  #1 (permalink)  
Antiguo 14/04/2015, 10:34
 
Fecha de Ingreso: octubre-2012
Mensajes: 9
Antigüedad: 11 años, 6 meses
Puntos: 0
Pregunta Está bien el ejemplo de MVC?

Hasta donde se esto podría ser MVC:

Controller:
Código:
<?php

require __DIR__ . '/../classes/class.routing.php';

$controll = new Routing;

$controll->get_model($_GET['page']);

$model = new IndexModel();
$model->get_page($_GET['page']);

$controll->get_view($_GET['page']);
?>
Model:
Código:
<?php
/**
 * Created by PhpStorm.
 * User: root
 * Date: 14/04/15
 * Time: 15:39
 */

class IndexModel{
    public function get_page($get){
        if($get == null){
            echo 'ERROR';
        }else{
            echo 'OK:    ' . $get;
        }
    }
}
View:
Código:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
Hellow MVC!
</body>
</html>
  #2 (permalink)  
Antiguo 14/04/2015, 11:20
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: Está bien el ejemplo de MVC?

Si es un aproximación, pero cual es la duda o problema con esto ?
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 14/04/2015, 11:23
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años
Puntos: 320
Respuesta: Está bien el ejemplo de MVC?

El controlador esta mal, debería ser el mismo routeador, y por supuesto, no debería relacionarse con la vista en ningún momento, menos aun llamarla.
Eventualmente hasta se podría prescindir de un controlador, si lograras definir una buena estructura para tus urls.

El modelo parece correcto. Aunque el escenario que planteas es extremadamente básico.

La vista esta bien porque no contiene código php.
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #4 (permalink)  
Antiguo 14/04/2015, 11:43
 
Fecha de Ingreso: octubre-2012
Mensajes: 9
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: Está bien el ejemplo de MVC?

NSD que está mal? Es que soy novato en el tema...

Código:
class Routing{

    public function get_model($get){
        if(file_exists(__DIR__ . '/../models/' . $get . '.model.php')){
            require __DIR__ . '/../models/' . $get . '.model.php';
        }else{
            exit('404 ERROR');
        }
    }
    public function get_view($get){
        if(file_exists(__DIR__ . '/../views/' . $get . '.php')){
            require __DIR__ . '/../views/' . $get . '.php';
        }else{
            exit('404 ERROR');
        }

    }

    public function get_class($class){
        if(file_exists(__DIR__ . '/../classes/class.' . $class . '.php')){
            require __DIR__ . '/../classes/class.' . $class . '.php';
        }else{
            echo 'The class is not existing';
        }
    }

}
Aquí está lo que tengo en routing... Me podéis ayudar con los fallos que tenga?

Si, es básico pero yo estoy empezando a usar este modelo, mejor comenzar con lo basico XD
  #5 (permalink)  
Antiguo 14/04/2015, 19:16
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años
Puntos: 320
Respuesta: Está bien el ejemplo de MVC?

MVC no es el mejor patrón de diseño para la web, al menos no tal como se aplica en otros ambientes.

En un sistema web moderno deberías plantearte una estructura siguiendo las siguientes consideraciones:

- Cada url corresponde o bien a un método publico de una clase o bien a un recurso estatico.
- El ruteador debe determinar si la url solicitada corresponde a una cosa o a la otra y actuar en consecuencia.
- El modelo son clases simples que nada conocen aparte de como hacer su función especifica.

Una forma basica pero que puede servir como punto de partida podria ser tener 2 carpetas, una llamada "view" y otra llamada "api" o "model" o como se te antoje, "api" puede ser un nombre mas acertado que "model" aunque terminaran siendo lo mismo.

Dentro de "view" van todos los recursos estaticos, eston son archivos html, css, js, imagenes, etc. Dentro de esta carpeta ESTA PROHIBIDO poner una sola linea de php en algún archivo.

Dentro de la carpeta "api" van las clases y el routeador.
Una medida de seguridad básica es que a la api solo se accede por POST mientras que a la vista solo se accede por GET, eso ya te da una pauta de como separar una cosa de la otra.

Te pongo el tipico "Hola mundo" siguiendo esta estructura que seria el equivalente a lo que tu planteaste.

/.htaccess
Código Apache:
Ver original
  1. Options +FollowSymLinks
  2. RewriteEngine on
  3.  
  4. RewriteCond %{REQUEST_METHOD} =POST
  5. RewriteCond %{REQUEST_FILENAME} !-f
  6. RewriteCond %{REQUEST_FILENAME} !-d
  7. RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)$ route.php?class=$1&method=$2 [PT,L]
  8.  
  9. RewriteCond %{REQUEST_METHOD} =GET
  10. RewriteCond %{REQUEST_FILENAME} !-f
  11. RewriteCond %{REQUEST_FILENAME} !-d
  12. RewriteRule ^(.*)$ view/$1 [PT,L]

/route.php
Código PHP:
Ver original
  1. <?php
  2.     list($class, $method) = [$_GET["class"], $_GET["method"]];
  3.     $post_params = $_POST;
  4.     unset($_POST, $_GET);
  5.    
  6.     require("api/$class.php");
  7.    
  8.     $class = ucfirst($class);
  9.     $instance = new $class();
  10.     echo json_encode($instance->$method($post_params));

/api/topic.php
Código PHP:
Ver original
  1. <?php
  2.     class Topic {        
  3.         public function usuarios($parametros)
  4.         {
  5.             return ["jaume5900", "hhs", "NSD"];
  6.         }        
  7.     }

/view/index.html
Código HTML:
Ver original
  1. <!DOCTYPE html>
  2.     <head>
  3.         <title>Hola mundo</title>
  4.     </head>
  5.     <body>
  6.         Usuarios que participaron en este post:
  7.         <ul></ul>
  8.         <script>
  9.             var api = new XMLHttpRequest();
  10.             api.onreadystatechange = function() {
  11.                 if(this.readyState == 4 && this.status == 200)
  12.                 {
  13.                     console.log(this.responseText);
  14.                     var data = JSON.parse(this.responseText), ul = document.getElementsByTagName("ul")[0];
  15.                     for(var nro=0; nro<data.length; nro++)
  16.                         ul.innerHTML += "<li>"+data[nro]+"</li>";
  17.                 }          
  18.             }.bind(api);       
  19.             api.open('POST', 'topic/usuarios', true);
  20.             api.send();    
  21.         </script>
  22.     </body>
  23. </html>

Una pregunta razonable seria ¿porque no mezclar php y html? si a priori eso es mas facil, la respuesta es porque estamos en 2015 y ese tipo de técnicas quedaron obsoletas, son de otra época, cuando php tenia que salir al rescate de las limitaciones de javascript y html era mas limitado, hoy en día me atrevería a decir que es exactamente al revés.

Por supuesto que es solo mi punto de vista, no dudo que otros pensaran diferente. Tu intenta sacar tus propias conclusiones.
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios

Etiquetas: ejemplo, html
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 10:46.