Створення та запуск проєкту Symfony
ServBay — це локальне середовище веб-розробки, спеціально розроблене для macOS та Windows. Воно містить інтегровані рентайми для PHP, Node.js, Python, Go, Java й багато інших, а також бази даних MySQL, PostgreSQL, MongoDB, Redis та підтримку веб-серверів Apache і Caddy. Цей посібник детально розповість, як швидко розгорнути та запустити Symfony-проєкт із ServBay на macOS та Windows.
Що таке Symfony?
Symfony — це відкритий PHP-фреймворк для веб-розробки, створений компанією SensioLabs. Його мета — надати розробникам сучасний, гнучкий та потужний інструментарій для створення сучасних веб-додатків і API. Symfony відповідає стандартам та кращим практикам веб-розробки, має багатий набір компонентів: маршрутизація, шаблони Twig, обробка форм, автентифікація, залежності через DI й багато іншого, спрощуючи типові задачі розробника.
Основні переваги й особливості Symfony
- Модульна архітектура: Symfony заснований на гнучкій бібліотеці компонентів — можна обирати тільки потрібні, створюючи як легкі, так і масштабні додатки.
- Висока продуктивність: Завдяки оптимізованому дизайну, ефективній роботі кеша і підтримці актуальних можливостей PHP, Symfony забезпечує чудову швидкість.
- Сильна спільнота: Розвинена екосистема Bundles (плагінів), багата база знань та документації й легко знаходити рішення для будь-яких питань.
- Гнучкість: Легко інтегрується з різними сторонніми бібліотеками та розширеннями, підходить для проєктів будь-якого розміру.
- Стабільність і підтримуваність: Відмінна якість коду, чітка структурованість і використання шаблонів проектування — все це робить додатки легкими для тестування, оновлення та масштабування.
Symfony підходить для розвитку як невеликих API, так і корпоративних систем.
Створення і запуск Symfony-проєкту із ServBay
ServBay забезпечує повноцінну підтримку для Symfony — потрібні версії PHP, Composer, бази даних, кеш-сервіси, веб-сервери. Далі пояснюється, як саме створити Symfony-проєкт та налаштувати його на локальному середовищі.
Передумови
Перед стартом переконайтесь у наступному:
- Встановлений ServBay: ServBay має бути встановлений і запущений на вашому macOS чи Windows. Якщо не встановлено — перегляньте інструкцію з інсталяції ServBay.
- Запущені базові сервіси: Основні сервіси ServBay — Caddy чи Apache, а також потрібні бази даних — працюють.
- Базове розуміння: Маєте початкове уявлення про PHP, Composer і Symfony.
Створення нового проєкту Symfony
Рекомендується розміщувати ваші сайти у каталозі /Applications/ServBay/www
— це спрощує управління проєктами.
Перевірка Composer
Composer йде у комплекті з ServBay і вже налаштований. Достатньо перевірити доступність командою:
composer --version
Створення директорії проєкту
У кореневому каталозі проектів створіть нову папку для Symfony-проєкту:
bashcd /Applications/ServBay/www mkdir servbay-symfony-app
1
2Створення проєкту із Composer
Перейдіть у створену папку і створіть проєкт із базовим каркасом
website-skeleton
:bashcd /Applications/ServBay/www/servbay-symfony-app composer create-project symfony/website-skeleton .
1
2Composer завантажить ядро Symfony та всі необхідні залежності.
Початкові налаштування
Налаштування Symfony здійснюється через змінні оточення у файлі .env
(корінь проєкту).
Налаштування змінних оточення (
.env
)Відкрийте
.env
, тут зберігаються конфігурації середовища (ключі, підключення до БД тощо). Змініть/додайте, як потрібно:dotenv# Приклад файлу .env APP_ENV=dev # середовище розробки APP_SECRET=your_secret_key # унікальний секретний ключ для безпеки # Підключення до бази даних (MySQL чи PostgreSQL — приклади) # DATABASE_URL="mysql://db_user:db_password@127.0.0.1:3306/db_name?serverVersion=8.0&charset=utf8mb4" # DATABASE_URL="postgresql://db_user:db_password@127.0.0.1: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
. Для прикладу — базаservbay_symfony_app
.
Налаштування веб-сервера (Сайт у ServBay)
Щоб відкрити ваш проект Symfony у браузері, створіть локальний сайт через панель ServBay. Коренем сайту має бути папка public/
всередині проєкту.
У панелі ServBay перейдіть до розділу “Сайт” (або “Хост” у старих версіях), створіть новий сайт:
- Назва (Name): Наприклад,
My Symfony Dev Site
. - Домени (Domain): Вкажіть локальний домен, наприклад,
servbay-symfony-test.local
. ServBay додасть його у систему. - Тип сайту (Website Type): Оберіть
PHP
. - Версія PHP (PHP Version): Вкажіть актуальну стабільну — наприклад,
8.3
. - Корінь сайту (Website Root): Особливо важливо — для Symfony це має бути
/Applications/ServBay/www/servbay-symfony-app/public
.
Збережіть і застосуйте зміни. ServBay оновить налаштування веб-сервера (Caddy або Apache) та автоматично згенерує й довірить SSL-сертифікат — ви можете одразу заходити через HTTPS.
Детально: Додавання першого сайту у ServBay.
Додавання базового прикладу коду
Щоб перевірити коректність налаштування, додайте простий маршрут і контролер для кореневого шляху.
Налаштування маршруту (
config/routes.yaml
)Додайте у
config/routes.yaml
: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Код створює контролер
DefaultController
, методindex
проходить через маршрут@Route("/")
і повертає рядок "Hello ServBay and Symfony!".
Перегляд сайту
Відкрийте браузер і зайдіть на https://servbay-symfony-test.local
. Якщо все налаштовано вірно, ви побачите:
Hello ServBay and Symfony!
1
Це означає, що ваш Symfony-проєкт успішно працює на локальному сервері ServBay. Оскільки SSL налаштовується автоматично, використовуйте протокол https://
.
Приклад роботи з базою даних і кешем
Symfony працює з реляційними базами через Doctrine ORM, а для кеша та NoSQL використовує Symfony Cache. ServBay містить готові бази даних і розширення PHP — використання максимально спрощене.
Реляційні бази даних (Doctrine ORM)
ServBay підтримує MySQL і PostgreSQL. Далі — рекомендації по конфігурації:
Налаштування підключення
У
.env
файлі — виберіть і налаштуйте рядокDATABASE_URL
:MySQL: (користувач —
root
, пароль —password
, порт —3306
):dotenv# .env DATABASE_URL="mysql://root:password@127.0.0.1:3306/servbay_symfony_app?serverVersion=8.0&charset=utf8mb4"
1
2PostgreSQL: (користувач —
root
, пароль —password
, порт —5432
):dotenv# .env DATABASE_URL="postgresql://root:password@127.0.0.1:5432/servbay_symfony_app?serverVersion=13&charset=utf8"
1
2
Переконайтесь, що сервер бази даних запущено у ServBay.
Створення бази
Якщо база
servbay_symfony_app
іще не створена — створіть її вручну через phpMyAdmin/pgAdmin (доступно з панелі ServBay), або командою Symfony:bashphp bin/console doctrine:database:create
1Створення Entity та міграцій
Для роботи із таблицями створюйте Entity (наприклад,
User
). Зручно це зробити через Maker Bundle:bashphp bin/console make:entity User
1Додайте, наприклад, поля
name
(string) таemail
(string, unique=yes).Згенеруйте файл міграції:
bashphp bin/console make:migration
1Файл створиться у
src/Migrations
із SQL-інструкціями.Запуск міграцій
Применіть зміни до бази:
bashphp bin/console doctrine:migrations:migrate
1Приклад взаємодії з базою
Додайте маршрути у
src/Controller/DefaultController.php
, щоб продемонструвати запис і читання через Doctrine. Не забудьте інжектувати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; // імпортуємо EntityManagerInterface use App\Entity\User; // імпортуємо User use Symfony\Component\HttpFoundation\JsonResponse; // для JSON-відповідей class DefaultController { private $entityManager; // Інжекція EntityManagerInterface через конструктор 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; // імпортуємо 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('demo-user@servbay.test'); // Зберігаємо об’єкт (підготовка до запису) $this->entityManager->persist($user); // Записуємо у базу $this->entityManager->flush(); return new Response('User added successfully!'); } /** * @Route("/get-users", name="app_get_users") */ public function getUsers(): JsonResponse { // Отримуємо всі User із бази $users = $this->entityManager->getRepository(User::class)->findAll(); // Формуємо масив для JSON-відповіді $usersArray = []; foreach ($users as $user) { $usersArray[] = [ 'id' => $user->getId(), 'name' => $user->getName(), 'email' => $user->getEmail(), ]; } // Повертаємо у форматі JSON 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
65
66
67Перевірка
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 (порт
11211
):dotenv# .env # ... інші налаштування ... CACHE_DSN=memcached://127.0.0.1:11211
1
2
3Перевірте, що Memcached сервер запущений.
Redis (порт
6379
):dotenv# .env # ... інші налаштування ... CACHE_DSN=redis://127.0.0.1:6379 # Якщо потрібен пароль (за замовчуванням у ServBay — без пароля): # CACHE_DSN=redis://:your_password@127.0.0.1:6379
1
2
3
4
5Перевірте, що Redis сервер запущений.
Приклад використання кеша у контролері
Додайте ін'єкцію
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; // імпортуємо 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
25Додайте маршрут у
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; // імпортуємо 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) { // Якщо кеш не знайдено — логіка тут $item->expiresAfter(3600); // зберігати 1 годину // Емуляція тривалої операції (наприклад, складний SQL-запит) $data = "Data generated at " . date('Y-m-d H:i:s'); // Результат для кешу return $data; }); // $cacheItem — з кеша або нові дані $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
47
48Тестування
https://servbay-symfony-test.local/cache-example
— при першій загрузці виконується генерація та кешування, наступні — зчитуються з кеша Memcached або Redis.
Поширені питання (FAQ)
П: Відвідування https://servbay-symfony-test.local
видає помилку 404 або 500, що робити?
В: Перевірте таке:
- Чи запущено ServBay та сервер (Caddy/Apache).
- Чи правильно вказаний домен і корінь сайту (
/Applications/ServBay/www/servbay-symfony-app/public
) у налаштуваннях. - Ознайомтеся з файлами логів Symfony (
var/log/dev.log
). - Запустіть
composer install
для установки залежностей. - Переконайтесь, що версія PHP сумісна з вашим проєктом.
П: Що робити при проблемах із підключенням до бази даних?
В: Перевірте:
- Що відповідний сервер бази даних запущено у ServBay.
- Правильність параметрів у
.env
(DATABASE_URL
— користувач, пароль, порт, ім’я бази). - Чи відповідають чинні облікові дані налаштованим у 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, веб-сервери, бази даних, кеш — і значно спрощує розробницьке оточення. На цій основі ви можете продовжити глибше вивчати можливості Symfony й використовувати додаткові інструменти, які пропонує ServBay для розробників.