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


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


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

Author: poo, 2010-02-25

5 answers

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

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

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

Обратите внимание, что вы не единственный человек, который хочет это сделать:

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

 19
Author: Gordon, 2010-02-25 11:00:35

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

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

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

ПРОСМОТР: 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");
 9
Author: Amirouche Douda, 2010-11-29 19:42:32

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

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

Вместо того, чтобы делать что-то по соглашению (/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 уже является совершенной системой шаблонов. В моей структуре я только что создал function template() в классе верхнего уровня Controller. И все это сводится к выполнению include $Template. Опять же, в моих рамках нет никакой конвенции. Каждый контроллер отвечает за создание экземпляра соответствующего шаблона и для понимания, ожидает ли запрос HTML, XML или JSON в качестве ответа.

Можете ли вы использовать существующую структуру?

Большая часть моего кода была вдохновлена Cake, хорошо известной платформой PHP MVC. Я бы определенно взглянул на него, прежде чем вы отправитесь далеко. Если вы собираетесь запустить свой собственный, по крайней мере, начните с понимания того, как работают все популярные. В конце концов, особые требования моего заявления заставили меня пойти по этому пути конечно, я мог бы построить свой собственный, но из всех уже существующих фреймворков можно было многому научиться. Внимательно осмотритесь вокруг, и, возможно, вы найдете что-то, что вам подойдет. По крайней мере, вы можете точно определить, что вам нужно из вашей структуры.

 7
Author: Peter Kovacs, 2010-03-01 01:18:07

Я лично использую свой собственный фреймворк, состоящий из :
1.Интерфейс Mysql
2. Система шаблонов (да, домашняя, а не умная)
3. Класс конфигурации (сведения о mysql, отладка и все остальное, что может понадобиться сценарию)
4. Класс создания простой формы.
5. класс запроса (все полезные сведения из $_SERVER в более удобочитаемом формате, например: $this->Запрос->ip, $this->Запрос->url, $this->Запрос->время)
6. Защита от взлома (черный список Ip-адресов, ключевые слова из общедоступных сканеров и т. Д.)
И я просто назовите это фреймворком:)

 6
Author: DCC, 2010-02-25 17:02:37

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

 0
Author: stillstanding, 2010-02-25 10:11:34