Resmedia / lesson.arh

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Знакомство с проектом

Добро пожаловать на учебный проект Geekbrains курса "Архитектура веб-приложений"!

Этот проект мы будем изучать и дорабатывать на протяжении 8 уроков. В текущем виде в нём могут встречаться преднамеренные недоработки.

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

Структура проекта

gb_architecture/ |- app/ | ├─ config/ | └─ framework |- src/ | ├─ Controller/ | ├─ Model/ | ├─ Service/ | └─ View/ |- test/ └─ web/

app

Ядро проекта, в котором происходит предварительная настройка и получение конфигурационных данных перед тем как запрос попадёт в контроллер. config - содержит данные конфигураций. framework - инструменты для работы с проектом.

src

Папка в которой происходит основная разработка проекта. Здесь же реализован MVC паттерн. Controller - контроллер. Точка входа всех запросов к серверу и последующего формирования ответа. Model - модель. Получает данные из различных источников (БД, внешнее api и т.д.). Service - бизнес-логика. Содержит код, который чаще всего может подвергаться рефакторингу и изменению. View - вид. Html представление ответа сервера.

test

Папка для unit tests (юнит-тестов)

web

Точка вход в проект, которая поднимает инфраструктуру и подготавливает проект к обработке запроса.

Внешние библиотеки

Конфигурирование

Компонент для работы с конфигурационными файлами из различных источников (YAML, XML, INI или база данных). Реализует возможность находить, загружать, комбинировать, автозаполнять и проверять данные конфигурации любого типа.

Документация

Github

Внедрение зависимости (Dependency Injection)

Библиотека реализующая контейнер внедрения зависимости (Dependency Injection Container. DIC). В её задачи входит внедрение зависимости как описано Мартином Фаулером, а также хранием зависимостей между компонентами системы и их связи. Благодаря этому вам не приходиться заботиться об инстанцировании (создании) объектов. В данном проекте DIC используется исключительно для работы с конфигурационными данными, но вы можете доработать проект и начать его использовать полноценно.

Документация

Github

HTTP обёртка

Обёртка над суперглобальными переменными такими как $_POST, $_GET, $_FILES, $_COOKIE, $_SESSION. Компонент предоставляет объектно-ориентированный слой представления HTTP запросов к серверу и помогает предотвратить использование суперглобальных переменных. Также в нём инкапсулированы вызовы для работы с HTTP, поэтому он умеет работать с функциями echo, header(), setcookie() и многими другими.

Документация

Github

Роутинг (Routing)

Роутинг помогает создавать красивые урлы вида /product/info/10 вместо давно устаревших /product/info.php?id=10 . Другой прекрасной особенностью библиотеки является возможность легко менять урлы например с /super_products/info на /product/info не переписывая его во всех местах проекта.

Документация

Github

Инструментарий

Для работы с проектом вам понадобится версия 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

Решение проблем

  1. Где находится конфигурационный файл php.ini?
php -i | grep 'Configuration File'
  1. Где находится файл логов?
php -i | grep error_log
  1. Как добавить файл с логами, если он не прописан в конфигурационном файле, или изменить его место расположения?

Откройте файл php.ini (как его найти рассказывается в пункте 1). Найдите секцию error_log. Если она закоментирована (точка с запятой в начале строки), то раскоментируйте её. Далее измените значение строки, чтобы оно стало error_log = /tmp/php_errors.log. Перезапустите веб-сервер, если он находится в работе. На этом всё, теперь файл с логами будет находится по пути /tmp/php_errors.log

  1. Как запустить интерпрететор со своим конфигурационным файлом?

Если ваш файл находится по пути /etc/php.ini.test, то запуск веб-сервера осуществляйте следующим образом

php -S 0.0.0.0:8080 -t web -c /etc/php.ini.test

About


Languages

Language:PHP 99.2%Language:Makefile 0.8%Language:Dockerfile 0.0%