Пишем движок на php mvc

Пишем свой MVC движок с нуля (урок 1) на примере магазина книг

Так вышло что я некогда не пользуюсь чужими движками и плагинами, может это и плохо да и скорее всего плохо, но нечего с собой поделать не могу. При написании одного из проектов решил использовать mvc(model, view, controller), не буду рассказывать о том что это и зачем это применять, google в помощь. Так вот решил сам все писать, и после не мало проведенного времени в гугле и прочтением всякой нужной и не нужной информации о mvc, приступил к написанию движка. Теперь хочу с вами поделиться дабы некто из таких как я не наступал на те же грабли.

И так, перед написанием надо понять какие базовые классы надо использовать помимо model, view, contoller, для этого надо подумать будет ли использоваться База Данных? в нашем проекте конечно будет, значит напишем класс appBase для работы с базой данных, идем дальше так как мы продаем книги то напишем класс book, для маршрутизации url напишем класс router.

И того, для работы движка потребуются следующие классы:

image

root — корневой каталог
app — каталог с файлами приложения
classes — каталог с базовыми классами
models — каталог с файлами моделей
controllers — каталог с файлами контроллеров
views — каталог с файлами представление(можно сказать с дизайном приложения)
comp — каталог с файлами представления для компьютеров
mobile — каталог с файлами представления для телефонов (если нужно)

Читайте также:  Php install dom module

Остальные три папки нет смысла описывать. В папке 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, можно увидеть следующее:

image

Это говорит о том что все хорошо и файлы подключились, даже если обратиться так habralesson.ru/dsfsdfsdfsdfsdf, мы увидим тоже самое, но при обращении вот так habralesson.ru/app, мы увидим следующее:

image

Чтобы скрыть файлы и папки в фале 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.

    Если Вы не хотите пропустить новые материалы на сайте,
    то Вы можете подписаться на обновления: Подписаться на обновления

    Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

    Порекомендуйте эту статью друзьям:

    Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

    1. Кнопка:
      Она выглядит вот так:
    2. Текстовая ссылка:
      Она выглядит вот так: Как создать свой сайт
    3. 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 и Контроллеры

    Это моя первая статья на Хабре, поэтому буду рад любой критике. Спасибо за прочтение и удачи!

    Источник

    Оцените статью