Esto es algo que estoy trabajando en ratitos libres, la criatura se llama Engine y es un patrón MVC escrito en php para personas que buscan algo intermedio, no buscan el potencial de cake o zend sino algo que cumpla la función MVC de una forma básica.
[1]: /images/engine.gif ()
![engine][1]
Muchas veces para montar un miniproyecto no necesitamos algo tan grande sino uno que cubra nuestras necesidades. Soy de esas personas que prefieren usar cosas intermedias porque creo que cumplen mucho mejor y son mas agradables para gente que no son programadores expertos.
Engine es muy sencillo, tan sencillo que asusta, tienes un archivo para configurar la base de datos y no te preocupes sino usas mysql, solo da error si utilizas los modelos.
Los controladores usan un sistema de routing por convención, es decir, dependiendo del nombre del método se usara una ruta u otra.
/controlador/action/id.formato o /controlador/id/action.formato
Varios ejemplos, por defecto el nombre simple se lo traga todo.
//ruta: /controlador/post/
function post() {}
//ruta: /controlador/10/post
function post_numeric() {}
//ruta: /controlador/post/10..rss
function post_rss() {}
//ruta: /controlador/10/post.rss
function post_numeric_rss() {}
El formato por defecto es php, lo suyo es buscar la combinación perfecta.
Los modelos tienen un sistema de cache interno, guarda las consulta en archivos de texto para no tener que hacer peticiones constantemente.
//sin cache
$post = new Post;
$content = $post->find($id);
//con cache, cada 10 minutos
$post = new Post(10);
$content = $post->find($id);
Las vistas son fáciles, tienes que retornar una cadena o un array con las vistas que quieras cargar, el se encarga de buscarlas y de añadirle la extensión. Y si quieres no retornas nada en la función y la vista será la del nombre del método.
class PostController extends APPController {
var $models = array('post');
function edit_html() {
global $content;
$id = url(0);
$post = new Post(10);
$content = $post->find($id);
return view('default/header','edit','footer');
}
}
Algunas características están tomadas de otros frameworks, es lógico, son de lo mejor.
Hay mas cosas que puedo contar pero aun las tengo a medias, por supuesto sin documentar :S
Proyecto en Google Code