Я хотел бы реализовать MVC с нуля в PHP, потому что я хочу полностью контролировать свой собственный код и не добавлять лишние пакеты из существующих фреймворков. Любой, кто имеет какие-либо советы?
Да, я видел статью Лердорфа, и кажется, что это не так много кода. На самом деле, я бы больше хотел иметь решение для контроллера для структурирования моего приложения. Я буду придерживаться своих собственных классов доступа к данным PDO.
Ваш вопрос несколько пахнет не-изобретаемым-здесь-синдромом . В этом случае моим советом было бы жить с дополнительным багажом существующих фреймворков, когда вы можете быть уверены, что они тщательно протестированы и поддержаны. Не изобретайте велосипед .
С другой стороны, приведенная выше аргументация помешала бы писать новые структуры. И писать один с нуля – это хорошее упражнение по кодированию, чтобы изучить и понять шаблон MVC.
Поэтому, если вы действительно настроены это сделать, мое предложение – узнать, что каждая часть MVC есть, делает и как они взаимодействуют . Вы тоже обязательно столкнетесь с шаблоном FrontController , так что вам тоже захочется узнать об этом.
Обратите внимание, что вы не единственный человек, желающий это сделать:
И есть и эта интересная статья Расмуса Лердорфа
Простая примерная реализация 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");
Я тоже написал внутреннюю структуру MVC в PHP. Его довольно просто, особенно когда вы удаляете любую функциональность «ActiveRecord» из вашей работы с рамой. Некоторые вещи, которые я рассматривал:
Вместо того, чтобы делать вещи по соглашению (/ foo maps to FooController), я делал все через конфигурацию. То есть, у меня есть файл master 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 уже является идеальной системой шаблонов. В моих рамках я только что создал function template()
в классе Controller
верхнего уровня. И все это сводится к выполнению include $Template
. Опять же, в моих рамках нет конвенции. Каждый контроллер отвечает за создание экземпляра соответствующего шаблона и за понимание того, ожидает ли запрос HTML, XML или JSON в качестве ответа.
Многие из моих кодов были вдохновлены Cake, известной структурой PHP MVC. Я бы определенно заглянул в нее, прежде чем переходить к далекому. Если вы собираетесь сворачивать свои собственные, по крайней мере начинать с понимания того, как работают все популярные. В конце концов, специфические требования моего приложения заставили меня пойти по пути создания собственного, но многое можно было узнать из всех уже существующих структур. Посмотрите вокруг, и вы можете найти что-то, что сработает для вас. По крайней мере, вы можете выяснить, что вам нужно из вашей структуры.
Я лично использую свои собственные рамки, состоящие из:
Интерфейс 1.Mysql
Система 2.Template (да, домашняя сваренная не умная)
Класс 3.Config (подробности mysql, отладка и все, что может понадобиться скрипту)
4. Простая форма Создание класса.
5.a Request Class (все полезные сведения из $ _SERVER в более читаемом формате ex: $ this-> Request-> ip, $ this-> Request-> url, $ this-> Request-> time)
6. Анти-хакинг (черный список Ip, ключевые слова от публичных сканеров и т. Д.)
И я просто называю это фреймворком 🙂
если вы просто собираетесь «переделать» колесо, вы можете взглянуть на исходный код «популярных» фреймворков. если вы хотите «изобретать» колесо, я предлагаю вам посмотреть в другом месте. изучите языки, специфичные для домена (DSL).