PHP OOP core framework

Solo estoy publicando esta pregunta para que algunos de ustedes puedan señalarme de la manera correcta. Poco a poco me estoy calentando a OOP, comenzando a entender el concepto. Quiero hacer un buen núcleo sólido o base para ser utilizado como backend de CMS. También usará MVC. He estado usandohttp: //gilbitron.github.com/PIP como la base MVC.

o que no puedo entender es lo siguiente:

Say, en la página del proyecto en el backend tengo 2 secciones: htmltext y projects y debería poder editarlos a ambos. La uri sería algo así como: // dominio / backend / projects (el método sería el índice y mostraría las 2 secciones)

Cuando hago clic en proyectos, ¿cómo debería manejarse? // dominio / backend / projects / projects / o // dominio / backend / projects / list /

Un paso más allá, un proyecto contendrá algunas imágenes o una galería: // dominio / backend / projects / edit / 5 / gallery / 2

Mi pregunta aquí es, primero: ¿sería una buena manera de hacerlo y aún más importante cómo se implementaría esto en OOP

el controlador de proyectos principales:

class projects {

    function index(){
        // view index
    }

    function edit{
        $project = new Project();
        $projectdata = $project->load(5);
    }
}

Un controlador de proyecto único

class project {

    function __construct(){
        $this->projectmodel = $this->loadModel('project_model'); // prepare the model to be used
    }

    function load($id){
        $this->projectmodel->loadproject($id);
    }
}

project model

class project_model extends model { //extends for DB  access and such

    function __construct(){
        // do stuff
    }

    function loadproject($id){
        return $this->db->query("SELECT * FROM projects where id=" . $id . " LIMIT 1");
    }
}

Ahora mi pregunta. Si este proyecto tiene imágenes, ¿dónde debo cargar la clase de imagen para manejarlas? ¿Debo cargarlo en el proyecto_modelo como $ this-> images = new Images (); y tener una función dentro del modelo

function loadimages($id){
    $this->images->load($id);
}

y luego las imágenes serían algo como:

class image extends model { //extends for DB  access and such 

    function __construct(){
    }

    function load($id){
        return $this->db->query("SELECT * FROM project_images where id=" . $id . " LIMIT 1");
    }
}

Parece que los controladores y modelos se mezclan de esta manera. Sin embargo, de manera lógica, un proyecto es un contenedor que contiene información de proyecto, que podría ser texto, imágenes y quizás videos. ¿Cómo haría yo para configurar eso lógicamente también?

Respuestas a la pregunta(6)

Su respuesta a la pregunta