Установка фреймворка Symfony: обзор структуры и конфигурация

16.01.2019 в 14:21
16460
+1125

Symfony, как и другие библиотеки и фреймворки на PHP, устанавливается с помощью пакетного менеджера Composer командой

composer create-project symfony/website-skeleton blog

где blog  —  имя вашего проекта, оно может быть любым.

Также на официальном сайте можно найти упрощённую версию фреймворка для разработки API. После установки вы получите актуальную на сегодняшний день версию Symfony  —  4.2. Она во многом отличается от предыдущих версий, основная идея которых состояла в наличии бандлов (bundle, это слово вы встретите не раз). Бандлом было ваше приложение внутри фреймворка, оно могло называться BlogBundle, ApiBundle и легко переносилось между проектами, что, сами понимаете, в некоторых случаях было невероятно полезно. Сейчас же структура фреймворка выглядит следующим образом:

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

Почти весь свой код вы будете писать в папке src, где после установки по умолчанию находятся папки Controller, Entity, Migrations и Repository. Если папка Controller не нуждается в представлении (по крайней мере, из курса по MVC вы должны о ней знать), то на остальных остановимся поподробнее. Для начала замечу, что автор Symfony считает, что этот фреймворк — это не MVC фреймворк, что бы там ни говорили. Он реализует модель Request-Response (или по-русски: запрос-ответ), это значит, что вы должны представлять, какой жизненный цикл проходит запрос от пользователя к серверу и как возвращать ответ обратно.

Таким образом, у нас нет привычных вам моделей, однако есть сущности (Entity), которые представляют из себя объектное отображение таблиц в базе данных. Также есть папка миграций (Migrations), где, как вы уже, наверно, догадались, будет храниться информация о миграциях базы данных. Чтобы подробнее познакомиться с темой миграций, советую прочитать следующую статью. Если коротко, идея миграций состоит в обеспечении актуальности структуры базы данных в любой момент разработки.

В папке Repository находятся классы-репозитории, каждый из которых соответствует одной конкретной сущности (Entity) и содержит методы, делающие запросы в базу данных. Таким образом, когда вам нужно будет достать данные, связанные с этой сущностью, вы будете использовать репозиторий, а не модель, как в случае с ActiveRecord.

Также у нас есть папка templates, где хранятся все наши шаблоны twig (о котором позже), и ничего больше. В папке config находится всё, что связано с конфигурацией проекта: роуты, сервисы, настройка пакетов вроде doctrine и switft_mailer и многое другое, чем мы будем пользоваться по ходу изучения фреймворка.

Чтобы запустить проект, вам даже не нужен веб-сервер, достаточно иметь php и mysql-клиент для работы с базой данных. Дело в том, что в Symfony есть встроенный веб-сервер, который вы можете запустить, выполнив в корне проекта следующую команду:

php bin/console server:run

Консоль отдаст нам актуальную ссылку, перейдя по которой мы увидим следующее:

Первое, что бросается в глаза (ну или должно бросаться), это замечательный debug bar внизу экрана. Он показывает статус-код (сейчас там 404, поскольку такого маршрута нет, но Symfony отдаёт стандартную страницу), время загрузки страницы, ошибки, авторизованы вы или нет, количество запросов в базу и многое другое. Debug bar будет работать только в dev режиме для помощи в разработке.

Вы могли заметить, что после команды server:run вы не можете пользоваться консолью, так как она отдаёт результаты работы проекта. Если вам это не нужно, выполните server:start и продолжайте работать с консолью дальше.

В завершение статьи настроим соединение с базой. Найдите файл .env в корне проекта. Он должен выглядеть так:

В строке DATABASE_URL замените db_user, db_password и db_name на актуальные значения вашего подключения к базе. При этом даже необязательно, чтобы база данных (db_name) существовала на данный момент. Symfony создаст её сама: для этого в терминале выполните команду:

php bin/console doctrine:database:create

Если все данные введены правильно, фреймворк создаст вам базу данных под именем, которое вы указали.

В данном уроке вы познакомились со структурой фреймворка и базовой конфигурацией. В следующем уроке мы создадим первый контроллер, поработаем с шаблонизатором Twig и многое другое.

loader
16.01.2019 в 14:21
16460
+1125
Логические задачи с собеседований