Git Product home page Git Product logo

arc.gb's Introduction

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

Добро пожаловать на учебный проект 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

arc.gb's People

Contributors

evg-rudakov avatar

Stargazers

 avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.