Как 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) Представление всегда является последним этапом процесса. Сеть просмотра всегда ничего не возвращает.
Ответ 4
Прочитайте следующее введение в сеть Symphony:
http://symfony.com/doc/current/book/from_flat_php_to_symfony2.html
Ответ 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-инфраструктуры.