strutura básica do PHP OOP

Estou apenas postando esta pergunta para que alguns de vocês possam me indicar o caminho certo. Estou lentamente me aquecendo para OOP, começando a entender o conceito. Quero criar um bom núcleo ou base sólida para ser usado como back-end do CMS. Ele também usará o MVC. Eu tenho usadohttp: //gilbitron.github.com/PIP como a base MVC.

A coisa que eu não consigo entender é o seguinte:

Diga, na página do projeto no back-end, eu tenho duas seções: htmltext e projects e devo poder editá-las. O uri seria algo como: // domain / backend / projects (o método seria o índice e mostraria as 2 seções)

Quando clico em projetos, como ele deve ser tratado? // domínio / back-end / projetos / projetos / ou // domínio / back-end / projetos / lista /

Um passo adiante, um projeto conterá algumas imagens ou uma galeria: // domain / backend / projects / edit / 5 / gallery / 2

Minha pergunta aqui é, primeiro: isso seria um bom caminho a percorrer e ainda mais importante como isso seria implementado no OOP

o controlador de projetos principais:

class projects {

    function index(){
        // view index
    }

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

Um único controlador de projeto

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");
    }
}

Agora minha pergunta. Se este projeto tiver imagens, onde devo carregar a classe de imagem para lidar com elas? Devo carregá-lo no project_model como $ this-> images = new Images (); e tem uma função dentro do modelo

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

e as imagens seriam 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 os controladores e os modelos se misturam dessa maneira. No entanto, de uma maneira lógica, um projeto é um contêiner que contém informações sobre o projeto, que podem ser textos, imagens e talvez vídeos. Como eu iria configurar isso logicamente também.

questionAnswers(6)

yourAnswerToTheQuestion