Пишем свой MVC движок с нуля (урок 1) на примере магазина книг
Так вышло что я некогда не пользуюсь чужими движками и плагинами, может это и плохо да и скорее всего плохо, но нечего с собой поделать не могу. При написании одного из проектов решил использовать mvc(model, view, controller), не буду рассказывать о том что это и зачем это применять, google в помощь. Так вот решил сам все писать, и после не мало проведенного времени в гугле и прочтением всякой нужной и не нужной информации о mvc, приступил к написанию движка. Теперь хочу с вами поделиться дабы некто из таких как я не наступал на те же грабли.
И так, перед написанием надо понять какие базовые классы надо использовать помимо model, view, contoller, для этого надо подумать будет ли использоваться База Данных? в нашем проекте конечно будет, значит напишем класс appBase для работы с базой данных, идем дальше так как мы продаем книги то напишем класс book, для маршрутизации url напишем класс router.
И того, для работы движка потребуются следующие классы:
root — корневой каталог
app — каталог с файлами приложения
classes — каталог с базовыми классами
models — каталог с файлами моделей
controllers — каталог с файлами контроллеров
views — каталог с файлами представление(можно сказать с дизайном приложения)
comp — каталог с файлами представления для компьютеров
mobile — каталог с файлами представления для телефонов (если нужно)
Остальные три папки нет смысла описывать. В папке app будут присутствовать 2 файла (bootstrap.php, config.php). И так дорогие программеры, готово…
Теперь можно приступать к нашему любимому написанию, знаете, я всегда считал что написанное приложение отзеркаливает душу программиста, по написанному приложению можно многое сказать о программисте как о человеке. Но что то меня понесло не туда. В этом уроке мы напишем файлы index.php , htaccess, botstrap.php.
И так что mvc работало как надо, надо перенаправлять запросы к серверу на файл index.php, для этого в корневой папке создаем файл htaccess а в нем прописываем, ну или копируем и вставляем следующее:
RewriteEngine On
RewriteCond % !-f
RewriteCond % !-d
RewriteRule .* index.php [L]
Хорошо, теперь можно работать дальше.
Создаем в корневом каталоге файл index.php и в нем пишем следующее:
Не буду объяснять что выполняют эти команды так как все прокомментировано, идем дальше в папке app создаем файл bootstrap.php в нем прописываем следующее:
Далее в папке app создаем файл config.php, в нем прописываем следующий код:
'); //fele exits design define('FILEEXT', '.html'); //Папка с компьютерной версией define('PAGEDIRCOMPUTER', 'comp/'); //Папка с мобильной версией define('PAGEDIRMOBILE', 'mobile/'); //Папка с файлами отображения define('PAGEDIRCOMP', 'app/views/'.PAGEDIRCOMPUTER); //Доменное имя приложения define('DOMAINSERVER', 'http://' . $_SERVER['HTTP_HOST']); //Папка с моделями define("PATCHMODEL", 'app/models/'); //Папка с контроллерами define("PATCCONTROLLERS", 'app/controllers/'); //Папка с файлами javascript define('JSFOLDER', DOMAINSERVER.'/app/views/comp/js/'); //Папка с файлами css define('CSSFOLDER', DOMAINSERVER.'/app/views/comp/css/'); //папка с файлами images define('IMGFOLDER', DOMAINSERVER.'/app/views/comp/images/'); /** * Настройки базы данных */ //Хост базы данных define('DBHOST', 'localhost'); //Логин базы данных define('DBLOGIN', 'root'); //Пароль базы данных define('DBPASSWORD', ''); //Название базы данных define('DBNAME', 'book_magazin'); /** * Настройки роутера */ //Контроллер по умолчанию define("CONTROLLERDEFAULT", 'Main'); //Действие по умолчанию define("ACTIONDEFAULT", 'Index'); //Выводим сообщение что файл config.php подключен echo "Файл config.php подключен
"; ?>
И так после обращения к сайту, у меня это habraLesson.ru, можно увидеть следующее:
Это говорит о том что все хорошо и файлы подключились, даже если обратиться так habralesson.ru/dsfsdfsdfsdfsdf, мы увидим тоже самое, но при обращении вот так habralesson.ru/app, мы увидим следующее:
Чтобы скрыть файлы и папки в фале htaccess добавим следующее:
Теперь можно удалить строки из файла config.php:
//Выводим сообщение что файл config.php подключен echo "Файл config.php подключен
";
B строки из файла bootstrap.php:
//Выводим сообщение что файл bootstrap.php подключен для проверки echo "Файл bootstrap.php подключен
";
На этом первый урок закончен, скоро будет второй. Спасибо, если кто сумел дочитать мой скучный первый пост.
Создание движка на MVC. Введение.
Всем привет! Сегодня я пишу первую статью из серии, посвященной созданию собственного MVC приложения.
Для начала стоит отметить, что если кто-то не знает, что такое MVC, то сначала прочитайте эту статью: что такое MVC?.
Итак, что мы будем иметь в конце? У нас будет движок, созданный с использованием шаблона проектирования MVC. Этот движок будет очень простой, где-то будут опускаться проверки, но это все сделано для того, чтобы вы поняли, как вообще создавать приложения на MVC, а потом, доработав наш движок, вы сможете использовать его для своих проектов. У нас же будет базовый функционал:
- авторизация
- небольшой чат
- добавление статей
- редактирование статей
- удаление статей
- управление пользователями
Все начинается со структуры папок. Она у нас будет такой:
Думаю, тут все понятно. В папках controllers, models, views и libs будут храниться контроллеры, модели, виды и прочие файлы. В процессе создания мы будем добавлять нужные нам папки и файлы.
Для создания нашего движка будет использоваться объектно-ориентированный подход. Если вы его плохо знаете, то следует тоже сначала почитать об этом статьи на сайте.
Итак, на этом я заканчиваю вводную статью, а в следующей мы уже начнем создавать движок на MVC. До скорого!
Создано 18.06.2014 20:10:01
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
- Кнопка:
Она выглядит вот так: - Текстовая ссылка:
Она выглядит вот так: Как создать свой сайт - BB-код ссылки для форумов (например, можете поставить её в подписи):
Комментарии ( 5 ):
А будут ли использоваться другие паттерны, кроме MVC?
Здесь весь упор сделан на MVC. Другие паттерны будут рассмотрены в отдельных статьях.
Миша, А какая может быть авторизация без регистрации? Добавьте и регистрацию к урокам.
Узнаете, как создать движок и базовый функционал, — добавите регистрацию сами. Так сказать на закрепление.
Движок на MVC: http://ci-engine.com/
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.
Copyright © 2010-2023 Русаков Михаил Юрьевич. Все права защищены.
Пишем мини MVC фреймворк на PHP #1
Привет, хабр! В этой статье я хочу написать о том, как сделать PHP-приложение с помощью схемы разделения данных приложения MVC.
Для работы нам нужна функция под названием autoload. Она избавляет нас от бесконечных require’ов. Мы можем вручную написать скрипт, но эта функция есть у знаменитого пакетного менеджера composer.
После установки инициализируем его в главной папке нашего мини-фреймворка командой composer init. на всех вопросах нажимаем ENTER.
Далее заходим в появившийся файл composer.json. Удаляем все и добавляем это:
И наконец, выполняем команду composer update. На этом настройка composer завершена.
Теперь, создадим папку core и файл .htaccess. Еще нужно создать папку public и создать в ней файл index.php — точку входа в приложение.
В файл .htaccess нужно вписать следующее:
RewriteEngine on RewriteRule .* public/index.php
Все, что делает этот файл — переадресовывает любые запросы в index.php.
Потом, в папке core создаем класс Application. Помещаем в него этот код:
Здесь мы создаем пока что пустой класс и пространством имен app\core.
На этом этапе структура должна выглядеть так:
│ .htaccess
│ composer.json
│ composer.lock
│
├───core
│ Application.php
│
├───public
│ index.php
│
└───vendor
Отлично. Теперь давайте выполним первую задачу: маршрутизацию.
Маршрутизация
В папке core создаем класс Router.php и начнем писать код:
routes['get'][$path] = $callback; > public function post($path, $callback) < $this->routes['post'][$path] = $callback; > >
Мы создали переменную routes, в котором будут храниться все маршруты в таком формате:
Теперь нужно создать класс Request.php для получения урлов, методов запроса и так далее:
public function getMethod() < return strtolower($_SERVER['REQUEST_METHOD']); >>
Тут все просто: метод getPath служит для получения url без GET-параметров, а getMethod просто возвращает HTTP-метод. Модифицируем класс Роутера:
request = new Request(); > public function get($path, $callback) < $this->routes['get'][$path] = $callback; > public function post($path, $callback) < $this->routes['post'][$path] = $callback; > public function resolve() < $path = $this->request->getPath(); $method = $this->request->getMethod(); $callback = $this->routes[$method][$path] ?? false; if ($callback === false) < return "404"; >return call_user_func($callback); > >
Тут мы создаем экземпляр Request’а и метод resolve, который возвращает то, что вернул callback.
Возвратимся в класс Application и создаем метод run, который запустит Роутер:
router = new Router(); > public function run() < echo $this->router->resolve(); > >
Теперь, можем протестировать текущий функционал. Создадим папку public и в ней файл index.php:
router->get('/', function () < return "Hello, habr!"; >); $app->run();
В этой же папке запустим команду php -S localhost:8080 (или любой другой порт). Зайдем на localhost:8080 в браузере и о чудо! Мы увидим надпись Hello, habr!
Итоги
На этом первая часть подходит к концу. В ней мы задали каркас нашего будущего фреймворка. В следующей части мы реализуем View и Контроллеры
Это моя первая статья на Хабре, поэтому буду рад любой критике. Спасибо за прочтение и удачи!