Как MVC в php без использования какой-либо структуры

У меня есть (базовое возможно) знание шаблона Model-View-Controller, и я хочу создать сайт, используя это. Но я нахожу это немного запутанным, как на самом деле реализовать это. Я застрял в деталях.

Скажите, что у меня есть сайт, на котором каждый пользователь хранит списки todo. Как бы вы к этому подошли? Какие классы вы бы создали? Какой класс будет выводить HTML, какой класс будет сервером в качестве контроллера и как он будет связываться с представлением для вывода результата? и др.

Извините, если это кажется глупым, и я думаю, это должно быть несколько легко, но я застрял.

Ответ 1

Это очень возможно сделать без существующей структуры и просто создать свой собственный. Это не очень сложная задача.

Не будучи специфичным для приложения, ваша инфраструктура MVC должна будет выполнить следующее:

  • Перенаправить все трафик на центральную страницу, чтобы каждый запрос получал правильно обработано.
  • Извлеките контроллер и действие из URL-адреса запроса. (например, запрос http://yoursite.com/Task/Add, вы должны перевести это на метод Add на TaskController)
  • Загрузите класс контроллера (в нашем примере TaskController). Возможно использование Autoload.
  • Вызвать метод Add на контроллере
  • Показать результат

Существует несколько способов реализации представлений, вы можете эмулировать ASPMVC, и каждое действие Controller возвращает ActionResult, который имеет один метод Execute. Тогда перегрузка этого параметра, ViewResult, позаботится о том, чтобы загрузить правильный вид и включить его с соответствующим ModelData.

Ответ 2

Вот точный ответ на ваш вопрос от самого RASMUS LERDORF. Прочитать.

Ответ 3

Для записи:

Это не так сложно сделать MVC в PHP, его больше связать с тем, чтобы быть дисциплинированным, а быть сложной задачей.

a) Модель (необязательно, вы можете использовать массив в PHP)

<?php
     class MyModel() {
     }
?>

b) Маршрут (index.php?)

<?php
include "...";
// here we collects all the information, such post,get and path values
$action=...;
$param=....;
switch($controller) {
      case "my": // www.myweb.com/my/action
      include "controller\MyController.php"; // open the right controller.
      break;
}
?>

c) Контроллер

<?php
include "model\MyModel.php";
switch($action) {
    case "add":
         // here live the logic, information, call for services and such.
         $model=....;
         // and finally...
         include "view\MyView.php";
         break;
}
?>

d) Просмотр

<html>
    <body>
       <?=$model->field;?>
    </body>

<html>

Как примечание:

a) Вид должен быть чистым, насколько это возможно. Подумайте, что представление может быть создано веб-дизайнером, который не заботится о php.

b) Представление всегда является последним этапом процесса. Сеть просмотра всегда ничего не возвращает.

Ответ 5

Хотя ваш вопрос слишком широк, я думаю, что могу помочь.

Вопрос номер один, который я имел, когда начинал с фреймворков: Какую структуру, если таковые имеются, я должен использовать? В вашем случае я бы не стал создавать веб-сайт MVC без предварительной схемы. Большая часть архитектуры, которую вы закончите писать, уже была сделана десятки раз.

Такие вещи, как абстракция БД, системы входа и т.д., скучны для написания. Возможно также использовать структуру, которая уже имеет эти вещи.

Я бы очень предложил эту книгу: http://www.amazon.com/Building-Applications-Symfony-CakePHP-Framework/dp/0470887346/ref = sr_1_2 т = UTF8 &? QID = 1315227178 & ср = 8-2. Он проведет вас через создание простого веб-сайта MVC с использованием трех разных фреймворков PHP MVC. К концу книги у вас будет достаточно опыта в каждой структуре, чтобы вы могли выбрать, какой из них вам больше всего нравится.

В качестве альтернативы, если вы хотите написать свою собственную фреймворк, чтобы вы могли узнать, как это делается, я бы рекомендовал ответ TJHeuvel. Другой вариант - прочитать исходный код существующей структуры, чтобы вы могли видеть, как другие ее реализовали.

Ответ 6

Комментарий Хелдара имеет смысл. Учебник фактически охватывает создание микро-рамки с использованием шаблона MVC.

Хотя вам нужно добавить к нему - с точки зрения добавления пользовательских маршрутов и какого-то механизма маршрутизации, но кроме того, это очень хороший шаг в развитии собственной MVC-инфраструктуры.