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 originalOptions +FollowSymLinks
RewriteEngine on
RewriteCond %{REQUEST_METHOD} =POST
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)$ route.php?class=$1&method=$2 [PT,L]
RewriteCond %{REQUEST_METHOD} =GET
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ view/$1 [PT,L]
/route.php
Código PHP:
Ver original<?php
list($class, $method) = [$_GET["class"], $_GET["method"]]; $post_params = $_POST;
require("api/$class.php");
$instance = new $class();
/api/topic.php
Código PHP:
Ver original<?php
class Topic {
public function usuarios($parametros)
{
return ["jaume5900", "hhs", "NSD"];
}
}
/view/index.html
Código HTML:
Ver original<!DOCTYPE html>
Usuarios que participaron en este post:
var api = new XMLHttpRequest();
api.onreadystatechange = function() {
if(this.readyState == 4 && this.status == 200)
{
console.log(this.responseText);
var data = JSON.parse(this.responseText), ul = document.getElementsByTagName("ul")[0];
for(var nro=0; nro<data.length; nro++)
ul.innerHTML += "<li>"+data[nro]+"
</li>";
}
}.bind(api);
api.open('POST', 'topic/usuarios', true);
api.send();
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.