Подтвердить что ты не робот

Как реализовать MVC с нуля в PHP?

Я хотел бы реализовать MVC с нуля в PHP, потому что я хочу полностью контролировать свой собственный код и никакой дополнительной корзины из существующих фреймворков. Любой, кто имеет какие-либо советы?


Да, я видел статью Лердорфа, и кажется, что это не так много кода. На самом деле, я бы больше хотел иметь решение для контроллера для структурирования моего приложения. Я буду придерживаться своих собственных классов доступа к данным PDO.

4b9b3361

Ответ 1

Ваш вопрос несколько пахнет как Not-Invented-Here-Syndrome. В этом случае моим советом было бы жить с дополнительным багажом существующих фреймворков, когда вы можете быть уверены, что они тщательно протестированы и поддержаны. Не изобретайте велосипед.

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

Итак, если вы действительно настроены это сделать, мое предложение состоит в том, чтобы узнать что каждая часть MVC, делает и как они взаимодействуют. Вы неизбежно столкнетесь с http://www.google.de/search?q=front+controller+php

http://www.google.de/search?q=build+your+own+mvc+php

И есть и эта интересная статья Расмуса Лердорфа

Ответ 2

Простая примерная реализация MVC (просто для понимания принципа)

МОДЕЛЬ: lib/Thing.class.php

class Thing
{
//class code ( CRUD, the application logic ...)
}

VIEW: theme/page_thing.php

<?php require("header.php");?>
//HTML CODE with some echo to show variables and loops to read arrays
<?php require("footer.php");?>

КОНТРОЛЛЕР: application/thing.php

require_once("lib/Thing.class.php");
/*
Some controls between the Model and the View ( if/else ...)
*/
include("theme/page_thing.php");

Ответ 3

Я тоже написал внутреннюю структуру MVC в PHP. Его довольно просто, особенно когда вы удаляете любую функциональность "ActiveRecord" из вашей работы с рамой. Некоторые вещи, которые я считал:

Как вы собираетесь сопоставлять URL-адреса контроллерам?

Вместо того, чтобы делать вещи по соглашению (/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. Я бы определенно заглянул в нее, прежде чем переходить к далекому. Если вы собираетесь сворачивать свои собственные, по крайней мере начинать с понимания того, как работают все популярные. В конце концов, специфические требования моего приложения заставили меня пойти по пути создания собственного, но многое можно было узнать из всех уже существующих структур. Посмотрите вокруг, и вы можете найти что-то, что сработает для вас. По крайней мере, вы можете точно определить, что вам нужно из вашей структуры.

Ответ 4

Я лично использую свою собственную структуру, состоящую из:
Интерфейс 1.Mysql
система 2.Template(да, домашняя сваренная не умная)
класс 3.Config(подробности mysql, отладка и все, что может понадобиться script)
4. Простая форма Создание класса.
5.a Request Class (все полезные сведения из $_SERVER в более читаемом формате ex: $this- > Request- > ip, $this- > Request- > url, $this- > Request- > time)
6. Анти-хакинг (черный список Ip, ключевые слова от публичных сканеров и т.д.)
И я просто называю его фреймворком:)

Ответ 5

если вы просто собираетесь "переделать" колесо, вы можете взглянуть на исходный код "популярных" фреймворков. если вы хотите "изобретать" колесо, я предлагаю вам посмотреть в другом месте. изучите языки, относящиеся к домену (DSL).