Как MVC в php без использования какого-либо фреймворка - PullRequest
15 голосов
/ 05 сентября 2011

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

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

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

Ответы [ 6 ]

11 голосов
/ 20 декабря 2015

Для записи:

Не так сложно сделать 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;
}
?>

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

<?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;
}
?>

г) Вид

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

<html>

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

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

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

9 голосов
/ 05 сентября 2011

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

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

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

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

7 голосов
/ 05 сентября 2011

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

3 голосов
/ 31 мая 2014

Прочитайте следующее введение в сеть Symphony: http://symfony.com/doc/current/book/from_flat_php_to_symfony2.html

2 голосов
/ 05 сентября 2011

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

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

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

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

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

0 голосов
/ 05 сентября 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...