как архитектура mvc используется в php без каких-либо фреймворков?
Я думаю, что, как правило, использование одной из общих схем – это, вероятно, путь. Причина в том, что многие хорошие разработчики долгое время писали, исправляли ошибки, настраивали и полировали, чтобы создать что-то твердое для базирования вашего сайта. Лучше всего найти то, что вам нравится, узнать его и придерживаться его (если только не найдете причины, чтобы не делать этого). Когда я работаю с PHP, мой выбор – это, как правило, Zend Framework , но есть также CodeIgniter , Symfony , CakePHP и множество других .
Если вы все еще хотите использовать шаблон MVC без существующей структуры, у вас либо есть выбор, чтобы поместить свои собственные или просто логически отделить каждую проблему друг от друга – это основной принцип MVC, рамки просто помогают вам достичь этого ,
Расмус Лердорф писал о своем минимальном подходе к шаблону MVC в PHP в 2006 году. Возможно, стоит прочитать. Вас также может заинтересовать мини-инфраструктура, такая как F3 :: PHP (только PHP 5.3+) – выглядит довольно многообещающе.
Тысячи слов не конкурируют с чистым примером, так что вот простой пример:
Представьте, что вы хотите отобразить страницу, описывающую «автомобиль» (с учетом «идентификатора автомобиля») у воображаемого продавца автомобиля: http://example.com/car.php?id=42 )
В принципе, вы можете структурировать свой код с такой иерархией, как:
Каталог конфигурации (это не часть архитектурного шаблона MVC):
+ config/ - database.php <?php return new PDO("mysql:host=localhost;dbname=database", "user", "password"); ?>
Папка для вашего корня документа (скрипты, действующие как контроллеры ):
+ htdocs/ - car.php <?php require_once 'CarService.php'; $carService = new CarService(require 'config/database.php'); $car = $carService->getInformationById($_GET['id']); require 'car.tpl'; ?>
Папка, инкапсулирующая всю вашу модель (подсказка: «Тонкие контроллеры, Fat model»):
+ model/ - CarService.php <?php class CarService { protected $database; public function __construct(PDO $database) { $this->database = $database; } public function getInformationById($id) { return $this->database->query( "SELECT model, year, price " . "FROM car " . "WHERE id = " . (int) $id )->fetch(); } } ?>
Последняя папка, содержащая все ваши представления (/ templates):
+ views/ - car.tpl <html> <head> <title>Car - <?php $GLOBALS['car']['model'] ?></title> </head> <body id="car"> <h1><?php $GLOBALS['car']['model'] ?></h1> Year: <?php $GLOBALS['car']['year'] ?> Price: <?php $GLOBALS['car']['price'] ?> </table> </body> </html>
Вот и все.
Вы можете заметить использование $ GLOBALS в шаблонах, это может быть удобным стандартом кодирования для обозначения локальных переменных шаблона из тех, которые вы получаете от «контроллера».
Чтобы вышеприведенный код работал, вам понадобится PHP для настройки:
include_path="/the/path/to/model:/the/path/to/views"
вам могут понадобиться хорошие URL-адреса, если вы используете Apache, вы можете добиться этого с помощью:
RewriteEngine On RewriteRule ^/car/([0-9]*)$ /car.php?id=$1 [L]
Это позволяет записывать URL-адреса, такие как http://example.com/car/42, которые будут внутренне преобразованы в http://example.com/car.php?id=42
Будучи файлами PHP, ничто не мешает вам создавать headers.tpl, footers.tpl, menu.tpl, … которые вы можете повторно использовать с include () / require (), чтобы избежать дублирования HTML.
Это очень похоже на то, что сказал Расмус Лердорф: http://toys.lerdorf.com/archives/38-The-no-framework-PHP-MVC-framework.html .
Не следует забывать, что MVC остается (n) (архитектурным) шаблоном . Шаблоны программного обеспечения являются многоразовыми принципами для решения общих проблем, если они будут использоваться для повторного использования кода , вместо этого они были бы названы «библиотеками».
Такие платформы, как Zend Framework, Symfony, CakePHP и т.п., предлагают структуру для принятия подхода MVC, но не могут обеспечить ее выполнение, поскольку MVC – это архитектурный шаблон, который нужно изучать и понимать , независимо от того, используете ли вы существующую структуру или нет.
Вы можете проверить учебник PHP MVC, чтобы узнать, как использовать простой шаблон MVC с нуля, а не в существующей структуре.
Это не. Core PHP – это «начало в глобальном заявлении пространства имен и язык, ориентированный на выражение». Вам нужен дополнительный код (и дополнительный URL-адрес Rewriter) для реализации любой архитектуры MVC. Этот дополнительный код является вашей структурой.
Так вы можете использовать MVC в php без каких-либо фреймворков
Чтобы получить шаблон MVC, вам просто нужно отделить свой код сохранения данных («модель», в основном материал базы данных), основную логику приложения («контроллер») и вашу презентацию во внешнем мире («просмотр», например, HTML-страницы или RSS каналы).
ЕСЛИ вы просто не смешиваете эти три части в своем коде, у вас уже есть действительно базовая архитектура MVC. Просто создайте отдельные классы для своих моделей, уровней представления и уровня контроллера, придумайте хорошо структурированный способ, как они разговаривают друг с другом, а затем придерживаются его!
Для удобства обслуживания кода вы ВСЕГДА стараетесь работать именно так.
Попробуйте интегрировать Pear DB Layer, Smarty, PHP GACL в ваш основной код для достижения архитектуры MVC.
Написав свою собственную структуру MVC, которая использует шаблоны MVC и принципы ООП ðŸ™‚
У вас должен быть Front Controller, поэтому каждый HTTP-запрос проходит через один файл, index.php, app.php или что угодно. Таким образом, вы можете настроить приложение в одном месте.
Оттуда вам нужен механизм маршрутизации, который будет анализировать HTTP-запрос, текущий URL-адрес, HTTP-заголовок / метод и на основе этого вы будете ссылаться на соответствующий контроллер / контроллер действий контроллера.
Из Controller вы можете получить доступ к своим Моделям, которые будут заниматься «тяжелой лифтингом», иметь дело с базой данных и доменной / бизнес-логикой и т. Д. И из Controller вы можете отображать Views.
Таким образом, вам нужна, по крайней мере, Front Controller, Router / Dispatcher, Controller, Models и Views, чтобы иметь простую архитектуру MVC.
Вы бы сделали это, как другие веб-фреймворки MVC, с небольшими вариациями в зависимости от ваших предпочтений.
Взгляните на некоторые простые структуры, такие как Codeigniter, и прочитайте их исходный код, чтобы получить представление о том, как они делают MVC.
И получайте удовольствие, создавая свой MVC! В конце концов, все это весело: D