Инжектор зависимостей разрешает зависимости вашего класса и гарантирует, что при создании экземпляра класса будут внедрены правильные объекты.
Я могу порекомендовать только один инжектор: Auryn. К сожалению, все известные мне альтернативы используют в своей документации и примерах антишаблон локатора сервисов (Service Locator).
В последней части вы настроили класс контроллера и сгенерировали вывод с помощью echo. Но давайте не будем забывать, что у нас есть хорошая объектно-ориентированная абстракция HTTP. И сейчас она недоступна изнутри вашего класса.
Разумно будет воспользоваться инверсией управления. Т.е. вместо того, чтобы на класс возлагать ответственность за создание необходимого ему объекта, вы просто просите об этом. И делается это с помощью внедрения зависимостей. Если сейчас все звучит немного сложно, не волнуйтесь. Просто следуйте инструкциям, и, увидев конечную реализацию, многое станет понятно.
В настоящем руководстве мы не будем реализовывать MVC (Модель-Представление-Контроллер). Вообще-то, MVC правильно реализовать на PHP невозможно, по крайней мере, так, как это было изначально задумано. Если нужны подробности, почитайте «Руководство для начинающих по MVC» и последующие посты.
Роутер (Router) отправляет данные различным обработчикам в зависимости от установленных вами правил. Пока что не имеет значения, какой URL-адрес используется для доступа к приложению - результат будет один и тот же. Сейчас мы исправим это.
В данном руководстве я буду использовать FastRoute. Но, как и всегда, вы вольны выбрать свой любимый пакет.
В PHP уже есть несколько встроенных функций, упрощающих работу с HTTP. Например, существуют суперглобальные переменные, содержащие информацию из запроса.
И они подойдут в случае, когда вы просто хотите запустить небольшой скрипт, который не составит труда поддерживать. Однако если вы хотите писать чистый, удобный в сопровождении SOLID-код, вместо них вам понадобится класс с красивым объектно-ориентированным интерфейсом, который вы сможете использовать в своем приложении.
Еще раз: вам не придется изобретать велосипед, а просто нужно установить пакет. Я решил написать свой собственный HTTP-компонент, потому что существующие мне не понравились, но вам не обязательно делать то же самое.
Обработчик ошибок позволяет вам приспосабливать то, в каком виде ваш код будет возвращать ошибки.
Приятная страница ошибок с кучей отладочной информации будет с вами на протяжении всего длительного пути разработки. И первый пакет для нашего приложения об этом позаботится.
Мне нравится filp/whoops, поэтому я покажу как вам его поставить на свой проект. Если вы предпочитаете другой, спокойно ставьте свой. В том и прелесть программинга без фреймворка - у вас есть тотальный контроль над собственным проектом.
Давно хотел я поиграться в Shadow Complex Remastered. Планировал как-нибудь прикупить - всего 599 р., да и скидки на эту игру частенько бывают. А тут июльское обновление Game Pass порадовало ее неожиданным наличием. Наслаждаюсь!
Только лишь потому, что вы не используете фреймворк, не значит, что необходимо изобретать колесо каждый раз, когда нужно что-то сделать. С помощью Composer вы можете устанавливать для своего приложения сторонние библиотеки.
Если вы еще не поставили Composer, перейдите по ссылке на сайт и сделайте это. Пакеты Composer для своего проекта вы найдете на Packagist.
Фронт-контроллер - это единая точка входа для вашего приложения.
Для начала создайте пустую папку под свой проект. Вам также понадобится точка входа, куда будут направляться все запросы. Это означает, что вам следует создать файл index.php
Распространенный способ для этого - помещать index.php в корневую папку каждого проекта. Таким же образом поступают некоторые фреймворки. Позвольте мне объяснить, почему вам так делать не стоит.