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

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


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

18
задан poo 25 February 2010 в 12:52
поделиться

5 ответов

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

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

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

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

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

20
ответ дан 30 November 2019 в 06:59
поделиться

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

6
ответ дан 30 November 2019 в 06:59
поделиться

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

0
ответ дан 30 November 2019 в 06:59
поделиться

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

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

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

7
ответ дан 30 November 2019 в 06:59
поделиться

Простой пример реализации 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
ответ дан 30 November 2019 в 06:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: