Добро пожаловать на учебный проект Geekbrains курса "Архитектура веб-приложений"!
Этот проект мы будем изучать и дорабатывать на протяжении 8 уроков. В текущем виде в нём могут встречаться преднамеренные недоработки.
В разделе "Структура проекта" находится описание проекта и его частей. "Внешние библиотеки" поясняют задачи основных вендоровских библиотек, которые использованы в проекте. В разделе "Инструментарий" рассказывается о доступных расширениях и как модно запустить для отладки свой веб-сервер. "Решение проблем" содержит информацию о распространённых ошибках.
gb_architecture/ |- app/ | ├─ config/ | └─ framework |- src/ | ├─ Controller/ | ├─ Model/ | ├─ Service/ | └─ View/ |- test/ └─ web/
Ядро проекта, в котором происходит предварительная настройка и получение конфигурационных данных перед тем как запрос попадёт в контроллер. config - содержит данные конфигураций. framework - инструменты для работы с проектом.
Папка в которой происходит основная разработка проекта. Здесь же реализован MVC паттерн. Controller - контроллер. Точка входа всех запросов к серверу и последующего формирования ответа. Model - модель. Получает данные из различных источников (БД, внешнее api и т.д.). Service - бизнес-логика. Содержит код, который чаще всего может подвергаться рефакторингу и изменению. View - вид. Html представление ответа сервера.
Папка для unit tests (юнит-тестов)
Точка вход в проект, которая поднимает инфраструктуру и подготавливает проект к обработке запроса.
Компонент для работы с конфигурационными файлами из различных источников (YAML, XML, INI или база данных). Реализует возможность находить, загружать, комбинировать, автозаполнять и проверять данные конфигурации любого типа.
Библиотека реализующая контейнер внедрения зависимости (Dependency Injection Container. DIC). В её задачи входит внедрение зависимости как описано Мартином Фаулером, а также хранием зависимостей между компонентами системы и их связи. Благодаря этому вам не приходиться заботиться об инстанцировании (создании) объектов. В данном проекте DIC используется исключительно для работы с конфигурационными данными, но вы можете доработать проект и начать его использовать полноценно.
Обёртка над суперглобальными переменными такими как $_POST, $_GET, $_FILES, $_COOKIE, $_SESSION. Компонент предоставляет объектно-ориентированный слой представления HTTP запросов к серверу и помогает предотвратить использование суперглобальных переменных. Также в нём инкапсулированы вызовы для работы с HTTP, поэтому он умеет работать с функциями echo, header(), setcookie() и многими другими.
Роутинг помогает создавать красивые урлы вида /product/info/10 вместо давно устаревших /product/info.php?id=10 . Другой прекрасной особенностью библиотеки является возможность легко менять урлы например с /super_products/info на /product/info не переписывая его во всех местах проекта.
Для работы с проектом вам понадобится версия php не ниже 7.1.0 и composer.
Далее перейдите в корневую папку проекта, из которой можно будет выполнить ряд полезных команд.
Перед началом работ с проектом, а также после каждого изменения файла composer.json, не забывайте обновлять внешние библиотеки и зависимости выполнив команду
composer install
Для просмотра результата, во время разработки, можно использовать встроенный в php веб-сервер выполнив команду
php -S 0.0.0.0:8080 -t web
либо короткий алиас
composer on
Возможные проблемы и их решения при работе с веб-сервером описаны в следующем разделе.
Никогда не пренебрегайте тестами, поэтому перед каждым коммитом запускайте юнит-тесты
bin/phpunit
либо алиас
composer test
Чтобы код был аккуратно написан с использованием стандарта кодирования PSR-1 и PSR-2 рекомендуется перед каждым коммитом выполнять команду, которая подскажет обо всех не соответствиях кода стандарту
bin/php-cs-fixer -vvv fix --dry-run
либо алиас
composer check
а чтобы не только проверить код, но и автоматически исправить его выполняйте
bin/php-cs-fixer fix
либо алиас
composer fix
- Где находится конфигурационный файл php.ini?
php -i | grep 'Configuration File'
- Где находится файл логов?
php -i | grep error_log
- Как добавить файл с логами, если он не прописан в конфигурационном файле, или изменить его место расположения?
Откройте файл php.ini (как его найти рассказывается в пункте 1). Найдите секцию error_log. Если она закоментирована
(точка с запятой в начале строки), то раскоментируйте её. Далее измените значение строки, чтобы оно стало
error_log = /tmp/php_errors.log
. Перезапустите веб-сервер, если он находится в работе.
На этом всё, теперь файл с логами будет находится по пути /tmp/php_errors.log
- Как запустить интерпрететор со своим конфигурационным файлом?
Если ваш файл находится по пути /etc/php.ini.test, то запуск веб-сервера осуществляйте следующим образом
php -S 0.0.0.0:8080 -t web -c /etc/php.ini.test