как реализовать mvc в core php

как архитектура mvc используется в php без каких-либо фреймворков?

Я думаю, что, как правило, использование одной из общих схем – это, вероятно, путь. Причина в том, что многие хорошие разработчики долгое время писали, исправляли ошибки, настраивали и полировали, чтобы создать что-то твердое для базирования вашего сайта. Лучше всего найти то, что вам нравится, узнать его и придерживаться его (если только не найдете причины, чтобы не делать этого). Когда я работаю с PHP, мой выбор – это, как правило, Zend Framework , но есть также CodeIgniter , Symfony , CakePHP и множество других .

Если вы все еще хотите использовать шаблон MVC без существующей структуры, у вас либо есть выбор, чтобы поместить свои собственные или просто логически отделить каждую проблему друг от друга – это основной принцип MVC, рамки просто помогают вам достичь этого ,

Расмус Лердорф писал о своем минимальном подходе к шаблону MVC в PHP в 2006 году. Возможно, стоит прочитать. Вас также может заинтересовать мини-инфраструктура, такая как F3 :: PHP (только PHP 5.3+) – выглядит довольно многообещающе.

Простой подход PHP MVC

Тысячи слов не конкурируют с чистым примером, так что вот простой пример:

Представьте, что вы хотите отобразить страницу, описывающую «автомобиль» (с учетом «идентификатора автомобиля») у воображаемого продавца автомобиля: 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-адреса

вам могут понадобиться хорошие 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 и принципы ООП ðŸ™‚

  1. У вас должен быть Front Controller, поэтому каждый HTTP-запрос проходит через один файл, index.php, app.php или что угодно. Таким образом, вы можете настроить приложение в одном месте.

  2. Оттуда вам нужен механизм маршрутизации, который будет анализировать HTTP-запрос, текущий URL-адрес, HTTP-заголовок / метод и на основе этого вы будете ссылаться на соответствующий контроллер / контроллер действий контроллера.

  3. Из Controller вы можете получить доступ к своим Моделям, которые будут заниматься «тяжелой лифтингом», иметь дело с базой данных и доменной / бизнес-логикой и т. Д. И из Controller вы можете отображать Views.

Таким образом, вам нужна, по крайней мере, Front Controller, Router / Dispatcher, Controller, Models и Views, чтобы иметь простую архитектуру MVC.

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

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

И получайте удовольствие, создавая свой MVC! В конце концов, все это весело: D