Створення та запуск проєкту Symfony
ServBay — це локальне веб-середовище розробки, спеціально створене для macOS. Воно містить у собі PHP, Node.js, Python, Go, Java й інші рантайми, а також бази даних MySQL, PostgreSQL, MongoDB, Redis і підтримку веб-серверів Apache та Caddy. У цьому посібнику ви дізнаєтеся, як швидко розгорнути та запустити проєкт Symfony на macOS з використанням ServBay.
Що таке Symfony?
Symfony — це потужний open-source PHP веб-фреймворк, створений SensioLabs. Його мета — надати розробникам сучасний, гнучкий та ефективний набір інструментів для створення web-додатків і API. Symfony підтримує кращі практики веб-розробки й оснащений багатофункціональними компонентами: маршрутизацією, шаблонізатором Twig, формами, аутентифікацією, DI-контейнером тощо, що значно спрощує виконання стандартних задач веб-розробки.
Основні переваги та можливості Symfony
- Модульна архітектура: Ядро Symfony складається з багаторазових компонентів, що дозволяє розробнику обрати лише ті частини, які необхідні в проєкті — від простих до масштабних застосунків.
- Висока продуктивність: Оптимізована архітектура, продумане кешування й підтримка новітніх можливостей PHP забезпечують відмінну продуктивність.
- Сильна спільнота: Величезна кількість розробників, багато сторонніх Bundle (плагінів) і детальна документація допомагають швидко вирішувати виникаючі питання.
- Гнучкість: Простота інтеграції сторонніх бібліотек або розширень — фреймворк підходить для проєктів будь-яких масштабів та складності.
- Стабільність і підтримуваність: Дотримання якісних стандартів коду та сучасних патернів роблять проєкти легкими для тестування, підтримки й розширення.
Symfony — чудовий вибір для створення як невеликих API, так і розгалужених корпоративних систем.
Створення та запуск проєкту Symfony з ServBay
ServBay надає все необхідне для запуску проєктів Symfony: потрібну версію PHP, Composer, веб-сервери, бази даних і кеш-сервіси. У цьому розділі ви дізнаєтесь, як створити новий проєкт Symfony, використовуючи можливості ServBay.
Передумови
Перед початком робіт переконайтеся, що:
- Встановили ServBay: На вашому macOS вже встановлений і запущений ServBay. Якщо ні — скористайтеся інструкцією з встановлення ServBay.
- ServBay працює: Основні сервіси ServBay (наприклад, Caddy або Apache і вибрані бази даних) активні.
- Базові знання: Ви маєте початкове уявлення про PHP, Composer, Symfony.
Створюємо проєкт Symfony
Рекомендується зберігати свої сайти в каталозі /Applications/ServBay/www
— так ServBay зможе легко знаходити та керувати ними.
Перевірка Composer
Composer уже вбудований у ServBay і доданий до змінних середовища, окремо встановлювати його не потрібно. Для перевірки введіть у терміналі
composer --version
.Створення папки для проєкту
Створіть новий каталог у корені рекомендованої директорії:
bashcd /Applications/ServBay/www mkdir servbay-symfony-app
1
2Створення проєкту Symfony через Composer
Увійдіть у нову папку й запустіть команду для створення скелету Symfony на основі
website-skeleton
. Це базовий шаблон із популярними залежностями для классичних веб-додатків.bashcd /Applications/ServBay/www/servbay-symfony-app composer create-project symfony/website-skeleton .
1
2Команда завантажить ядро Symfony та всі залежності у поточний каталог.
Початкове налаштування
Основні параметри проєкту Symfony задаються через змінні середовища, записані у файлі .env
у кореневій директорії проєкту.
Налаштуйте змінні середовища (
.env
)Відкрийте файл
.env
. Тут ви задаєте конфігурацію оточення: підключення до бази даних, секретний ключ тощо. Відкоригуйте параметри відповідно до своїх потреб.Переконайтеся, що нижче наведені параметри задані правильно або адаптовані до вашого середовища ServBay:
dotenv# Приклад .env APP_ENV=dev # режим розробки APP_SECRET=your_secret_key # замініть на унікальний випадковий рядок для безпеки # Підключення до бази даних (приклади - MySQL, PostgreSQL) # DATABASE_URL="mysql://db_user:[email protected]:3306/db_name?serverVersion=8.0&charset=utf8mb4" # DATABASE_URL="postgresql://db_user:[email protected]:5432/db_name?serverVersion=13&charset=utf8" # DATABASE_URL="sqlite:///%kernel.project_dir%/var/data.db"
1
2
3
4
5
6
7
8Замість
your_secret_key
укажіть випадковий безпечний рядок. За замовчуванням у ServBay користувач бази —root
, пароль —password
(у production змініть ці значення!).
Прив’язка до віртуального хоста (сайту) в ServBay
Щоб відкрити проєкт Symfony у браузері, створіть новий сайт у ServBay. Коренем веб-сайту для Symfony є папка public/
у вашому проєкті.
Відкрийте контрольну панель ServBay, перейдіть у розділ "Сайти" (або "Хости" в старих версіях), додайте новий сайт:
- Назва (Name): придумайте просту для впізнаваня назву, наприклад,
My Symfony Dev Site
. - Домен (Domain): вкажіть локальний домен для розробки, наприклад,
servbay-symfony-test.local
. ServBay автоматично налаштує його на локальний хост. - Тип сайту (Website Type): оберіть
PHP
. - Версія PHP (PHP Version): виберіть сумісну із Symfony версію PHP, рекомендується найновіша стабільна — наприклад,
8.3
. - Корінь сайту (Website Root): дуже важливо! Встановіть
/Applications/ServBay/www/servbay-symfony-app/public
.
Збережіть і застосуйте зміни. ServBay оновить конфігурацію веб-сервера (Caddy/Apache), створить і довірить SSL-сертифікат, тому сайт буде доступний за HTTPS.
Детальна інструкція: Додавання першого сайту в ServBay.
Додаємо базовий код для перевірки
Щоб впевнитися, що сайт налаштовано, додайте просту маршрут і контролер, який на головній сторінці буде виводити тестовий текст.
Налаштування маршруту (
config/routes.yaml
)Відкрийте файл
config/routes.yaml
і додайте маршрут/
, який буде вести на методindex
контролера:yaml# config/routes.yaml index: path: / controller: App\Controller\DefaultController::index
1
2
3
4Створення контролера (
src/Controller/DefaultController.php
)Створіть файл
src/Controller/DefaultController.php
із вмістом:php<?php // src/Controller/DefaultController.php namespace App\Controller; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; class DefaultController { /** * @Route("/", name="index") */ public function index(): Response { // Повертаємо просту HTTP-відповідь return new Response('Hello ServBay and Symfony!'); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18Цей контролер має метод
index
і через анотацію@Route("/")
підключений до головної сторінки. Після відкриття сайту ви побачите текст "Hello ServBay and Symfony!".
Відкриття сайту
Відкрийте браузер і перейдіть за адресою, яку ви додали у ServBay, наприклад, https://servbay-symfony-test.local
. Якщо все налаштовано правильно, ви побачите повідомлення:
Hello ServBay and Symfony!
1
Це означає, що ваш проєкт Symfony успішно запущено через веб-сервер ServBay із підтримкою HTTPS.
Приклади роботи з базою даних та кешем
Symfony часто використовує Doctrine ORM для роботи з реляційними базами даних і компонент Cache — для кешування та NoSQL. ServBay postачається з MySQL, PostgreSQL і кешами Redis/Memcached разом із відповідними PHP-розширеннями.
Приклад роботи з реляційною БД (Doctrine ORM)
ServBay підтримує MySQL та PostgreSQL. Ось як підключити і використати ці бази у Symfony.
Підключення до БД
У файлі
.env
вкажіть відповідний параметрDATABASE_URL
, залежно від вашого вибору.- Для MySQL: За замовчуванням користувач —
root
, пароль —password
, порт3306
.dotenv# .env DATABASE_URL="mysql://root:[email protected]:3306/servbay_symfony_app?serverVersion=8.0&charset=utf8mb4"
1
2 - Для PostgreSQL: За замовчуванням користувач —
root
, пароль —password
, порт5432
.dotenv# .env DATABASE_URL="postgresql://root:[email protected]:5432/servbay_symfony_app?serverVersion=13&charset=utf8"
1
2
Переконайтеся, що обрана база даних ввімкнена у панелі ServBay.
- Для MySQL: За замовчуванням користувач —
Створіть базу даних
Якщо БД
servbay_symfony_app
ще не існує, створіть її через інтерфейс (phpMyAdmin/pgAdmin) або командою Symfony:bashphp bin/console doctrine:database:create
1Створення Entity та міграцій
Doctrine Entities — це відображення таблиць у базі. Для генерації entity та міграцій зручно використовувати Maker Bundle.
- Створення Entity (наприклад,
User
):bashДодайте поля відповідно до питань (наприклад,php bin/console make:entity User
1name:string
,email:string, unique=yes
). - Генерація міграції:bashМіграційний файл створиться у
php bin/console make:migration
1src/Migrations/
.
- Створення Entity (наприклад,
Запуск міграції
Примініть міграцію, щоб створити структуру таблиць:
bashphp bin/console doctrine:migrations:migrate
1Додайте приклад роботи з БД
Оновіть
src/Controller/DefaultController.php
, щоб реалізувати маршрути для додавання та перегляду користувачів. Потрібно інжектуватиEntityManagerInterface
.Додайте інжекцію через конструктор:
php<?php // src/Controller/DefaultController.php namespace App\Controller; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; use Doctrine\ORM\EntityManagerInterface; use App\Entity\User; use Symfony\Component\HttpFoundation\JsonResponse; class DefaultController { private $entityManager; // Дістаємо EntityManagerInterface через DI public function __construct(EntityManagerInterface $entityManager) { $this->entityManager = $entityManager; } /** * @Route("/", name="app_index") */ public function index(): Response { return new Response('Hello ServBay and Symfony!'); } // ... додаткові методи ... }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30Додайте нові маршрути в
config/routes.yaml
:yaml# config/routes.yaml # ... інші маршрути ... mysql_add_user: path: /mysql-add-user # або /pgsql-add-user, залежно від БД controller: App\Controller\DefaultController::addUser mysql_get_users: path: /mysql-users # або /pgsql-users controller: App\Controller\DefaultController::getUsers
1
2
3
4
5
6
7
8Додайте відповідні методи у контролері:
php<?php // src/Controller/DefaultController.php namespace App\Controller; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; use Doctrine\ORM\EntityManagerInterface; use App\Entity\User; use Symfony\Component\HttpFoundation\JsonResponse; class DefaultController { private $entityManager; public function __construct(EntityManagerInterface $entityManager) { $this->entityManager = $entityManager; } /** * @Route("/", name="app_index") */ public function index(): Response { return new Response('Hello ServBay and Symfony!'); } /** * @Route("/add-user", name="app_add_user") */ public function addUser(): Response { $user = new User(); // Додаємо тестові дані, пов'язані з ServBay $user->setName('ServBay Demo User'); $user->setEmail('[email protected]'); $this->entityManager->persist($user); $this->entityManager->flush(); return new Response('User added successfully!'); } /** * @Route("/get-users", name="app_get_users") */ public function getUsers(): JsonResponse { // Забираємо всіх користувачів із БД $users = $this->entityManager->getRepository(User::class)->findAll(); // Конвертуємо для JsonResponse $usersArray = []; foreach ($users as $user) { $usersArray[] = [ 'id' => $user->getId(), 'name' => $user->getName(), 'email' => $user->getEmail(), ]; } return new JsonResponse($usersArray); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64Тестування
- Відвідайте
https://servbay-symfony-test.local/add-user
для додавання нового користувача. - Відвідайте
https://servbay-symfony-test.local/get-users
для перегляду списку (JSON).
- Відвідайте
Кеш та NoSQL (Symfony Cache)
ServBay містить Redis і Memcached із необхідними PHP-розширеннями. Використовуйте компонент Symfony Cache для роботи з ними.
Конфігуруємо підключення до кешу
У файлі
.env
задайте з'єднання до кеш-сервісу.- Memcached: За замовчуванням port —
11211
.dotenvПереконайтеся, що сервіс Memcached активний у ServBay.# .env # ... решта налаштувань ... CACHE_DSN=memcached://127.0.0.1:11211
1
2
3 - Redis: За замовчуванням port —
6379
.dotenvАктивуйте Redis у панелі ServBay.# .env # ... решта налаштувань ... CACHE_DSN=redis://127.0.0.1:6379 # Якщо Redis захищений паролем: # CACHE_DSN=redis://:[email protected]:6379
1
2
3
4
5
- Memcached: За замовчуванням port —
Приклад використання кешу
Додайте у
src/Controller/DefaultController.php
DI дляCacheInterface
:php<?php // src/Controller/DefaultController.php namespace App\Controller; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; use Doctrine\ORM\EntityManagerInterface; use App\Entity\User; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Contracts\Cache\CacheInterface; class DefaultController { private $entityManager; private $cache; public function __construct(EntityManagerInterface $entityManager, CacheInterface $cache) { $this->entityManager = $entityManager; $this->cache = $cache; } // ... інші методи ... }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24Додайте маршрут у
config/routes.yaml
:yaml# config/routes.yaml # ... інші маршрути ... cache_example: path: /cache-example controller: App\Controller\DefaultController::cacheExample
1
2
3
4
5Реалізуйте метод у контролері:
php<?php // src/Controller/DefaultController.php namespace App\Controller; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; use Doctrine\ORM\EntityManagerInterface; use App\Entity\User; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Contracts\Cache\CacheInterface; use Symfony\Component\Cache\Item\ItemInterface; class DefaultController { private $entityManager; private $cache; public function __construct(EntityManagerInterface $entityManager, CacheInterface $cache) { $this->entityManager = $entityManager; $this->cache = $cache; } // ... інші методи ... /** * @Route("/cache-example", name="app_cache_example") */ public function cacheExample(): Response { // Пробуємо отримати з кешу дані $cacheItem = $this->cache->get('my_symfony_cache_key', function (ItemInterface $item) { // Callback викликається, якщо кеш порожній $item->expiresAfter(3600); // дійсний 1 годину // Імітація тривалої операції $data = "Data generated at " . date('Y-m-d H:i:s'); return $data; }); $output = "From Cache: " . $cacheItem; return new Response($output); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46Тестування
- Перейдіть на
https://servbay-symfony-test.local/cache-example
. Перший раз сторінка згенерує нові дані та збереже їх у кеш, далі — підтягує їх без повторної генерації, поки кеш не закінчиться.
- Перейдіть на
Поширені питання (FAQ)
Питання: При спробі перейти за адресою https://servbay-symfony-test.local
сторінка не знаходиться або помилка 500. Що робити?
Відповідь:
- Перевірте, чи працює ServBay, чи активовано сайт (Caddy/Apache).
- Переконайтеся, що в конфігурації сайту вказаний домен
servbay-symfony-test.local
і шлях/Applications/ServBay/www/servbay-symfony-app/public
. - Подивіться лог-файл
var/log/dev.log
проєкту для діагностики. - Запустіть у терміналі
composer install
у корені проєкту для встановлення всіх залежностей. - Перевірте, чи версія PHP відповідає вимогам Symfony.
Питання: Не працює підключення до бази даних?
Відповідь:
- Увімкніть відповідний сервіс у ServBay (MySQL/PostgreSQL).
- Перевірте рядок
DATABASE_URL
у.env
: логін, пароль, хост (127.0.0.1), порт (MySQL — 3306, PostgreSQL — 5432), назва бази. - Перевірте відповідність логіна/пароля налаштуванням ServBay.
- Переконайтеся, що база
servbay_symfony_app
вже створена.
Питання: Команди php bin/console
не працюють?
Відповідь:
- Запустіть командний рядок у папці
/Applications/ServBay/www/servbay-symfony-app
. - Переконайтеся, що PHP із ServBay коректно внесено у PATH (встановлюється автоматично). Для перевірки можна виконати
which php
— шлях повинен вести на версію PHP із ServBay.
Підсумки
Завдяки цьому посібнику ви змогли створити, налаштувати й запустити базовий проєкт Symfony на macOS із використанням ServBay. Усі основні інструменти — PHP, Composer, веб-сервір, база даних, кеш — входять у ServBay, що значно спрощує конфігурування середовища. Ви можете починати глибше вивчати Symfony чи додавати додаткові пакети й сервіси, які надає ServBay для ще ширших можливостей розробки.