Я хотел бы реализовать MVC с нуля в PHP, потому что я хочу полный контроль над своим собственным кодом и никаким дополнительным багажом от существующих платформ. Кто-либо, у кого есть совет?
Да, я видел статью Lerdorfs, и кажется, что это не так много кода, в конце концов. На самом деле я больше хотел бы иметь решение представления контроллера для структурирования моего приложения. Я буду придерживаться своих собственных самодельных классов доступа к данным PDO.
Ваш вопрос несколько пахнет Синдромом «не изобретено здесь» . В этом случае я бы посоветовал смириться с лишним багажом существующих фреймворков, когда вы можете быть уверены, что они тщательно протестированы и поддерживаются. Не изобретайте велосипед .
С другой стороны, приведенная выше аргументация помешает написанию новых фреймворков. И написание одного с нуля - это хорошее упражнение по кодированию для изучения и понимания шаблона MVC.
Итак, если вы действительно полны решимости это сделать, я предлагаю изучить , что такое каждая часть MVC, что делает и как они взаимодействуют . Вы неизбежно столкнетесь с паттерном FrontController , так что вам тоже захочется узнать об этом.
Обратите внимание, что это не только вы:
А еще есть интересная статья Расмуса Лердорфа
Я лично использую свой собственный фреймворк, состоящий из:
1. Интерфейс MySQL
2. Шаблон Система (да, домашнее пиво, а не умно)
3.Config Class (детали mysql, отладка и все остальное, что может понадобиться скрипту)
4. Класс создания простых форм.
5.a Класс запроса (все полезные сведения из $ _SERVER в более удобочитаемом формате, например: $ this-> Request-> ip, $ this-> Request-> url, $ this-> Request -> время)
6. Защита от взлома (черный список IP, ключевые слова из публичных сканеров и т. Д.)
И я называю это просто фреймворком :)
если вы просто собираетесь «переработать» колесо, вы можете взглянуть в исходном коде «популярных» фреймворков. Если вы хотите «заново изобрести» колесо, я предлагаю вам поискать в другом месте. изучать предметно-ориентированные языки (DSL).
Я тоже написал самодельный фреймворк MVC на PHP. Это довольно просто, особенно когда вы удаляете любую функцию «ActiveRecord» из своей работы с фреймами. Некоторые вещи, которые я рассмотрел:
Вместо того, чтобы делать что-то по соглашению (/ foo сопоставляется с FooController), я все делал через конфигурацию. То есть у меня есть главный файл routes.php, в котором я перечисляю все возможные URL-адреса, которые мое приложение примет. Таким образом, он заполнен такими вещами, как:
Router::add( '/foo/:Param1/:Param2',
array( 'Controller' => 'MyController',
'Action' => 'my_method',
'Method' => 'GET',
'Parameters' => array( 'Param1' => '\d+',
'Param2' => '\S+' ) );
В этом случае мы сопоставляем URL-адреса типа / foo / 123 / abc
. Когда URL-адрес совпадает, он отправляется как MyController :: my_method (array ('Param1' => '123', 'Param2' => 'abc'));
.
Существует множество систем шаблонов. Но на самом деле PHP уже представляет собой идеальную систему шаблонов. В своей структуре я только что создал функцию template ()
в классе Controller
верхнего уровня. И все сводится к выполнению include $ Template
. Опять же, в моей структуре нет соглашения. Каждый контроллер отвечает за создание экземпляра соответствующего шаблона и за понимание того, ожидает ли запрос в качестве ответа HTML, XML или JSON.
Большая часть моего кода была вдохновлена Cake, хорошо известным фреймворком PHP MVC. Я определенно взгляну на него, прежде чем вы зайдете слишком далеко.Если вы собираетесь использовать свои собственные, по крайней мере, начните с понимания того, как работают все популярные. В конце концов, специфические требования моего приложения заставили меня пойти по пути создания собственного, но многое можно было извлечь из всех уже существующих фреймворков. Внимательно осмотритесь, и вы можете найти что-то, что вам подходит. По крайней мере, вы можете точно выяснить, что вам нужно, из вашего фреймворка.
Простой пример реализации MVC (просто для понимания принципа)
class Thing
{
//class code ( CRUD, the application logic ...)
}
<?php require("header.php");?>
//HTML CODE with some echo to show variables and loops to read arrays
<?php require("footer.php");?>
require_once("lib/Thing.class.php");
/*
Some controls between the Model and the View ( if/else ...)
*/
include("theme/page_thing.php");