Створення та запуск Slim-проєкту в ServBay
У цьому матеріалі ви дізнаєтеся, як швидко створити, налаштувати й запустити PHP-проєкт на Slim Framework у потужному локальному середовищі ServBay. ServBay пропонує інтегровані пакети PHP, вебсервери (Caddy/Nginx/Apache) і різноманітне серверне ПЗ, роблячи його ідеальним вибором для розробки на Slim.
Що таке Slim?
Slim — це легкий PHP-мікрофреймворк, розроблений для швидкої побудови простих, але функціональних вебзастосунків і API. Slim надає ядро маршрутизації, обробки запитів і відповідей, ідеально підходить для швидкої розробки, прототипування, а також як основа для побудови складніших систем.
Основні особливості та переваги Slim
- Легковаговість: Ядро Slim-фреймворку дуже компактне, має низьке споживання ресурсів і блискавичний старт. Підходить для малих і середніх застосунків або мікросервісів.
- Гнучкість: Slim має модульну архітектуру, тож легко інтегрується з будь-якими сторонніми бібліотеками (шаблонізатори, ORM, автентифікація), що дозволяє обирати інструменти під конкретні задачі.
- Зручність використання: Завдяки зрозумілому API та якісній документації розробник швидко опанує Slim і зможе оперативно розпочати роботу.
- Потужна маршрутизація: Підтримуються різні HTTP-методи (GET, POST, PUT, DELETE тощо) та складна конфігурація маршрутів (групи, middleware, параметри).
- Підтримка middleware: Slim дозволяє додавати middleware — наприклад, для аутентифікації, логування, обробки CORS і багато іншого до або після основної логіки застосунку.
Slim — ідеальний вибір для побудови RESTful API, швидких прототипів або автономних сервісів.
Створення та запуск Slim-проєкту у ServBay
Далі розглянемо, як за допомогою готового PHP-середовища ServBay та його функціоналу Сайт підтримувати і запускати ваш Slim-проєкт.
Передумови
Перед початком переконайтеся, що виконали наступне:
- Встановіть та запустіть ServBay: ServBay повинен бути встановлений на вашому macOS, і додаток має бути запущено.
- Composer вже в ServBay: Composer вбудований у ServBay і не потребує окремої установки.
Створення Slim-проєкту
Рекомендуємо зберігати всі проєкти у каталозі /Applications/ServBay/www
для зручності керування та налаштувань ServBay.
- Перейдіть до кореня сайтів ServBay:bash
cd /Applications/ServBay/www
1 - Створіть папку проєкту: Заведіть окремий каталог для вашого Slim-проєкту.bash
mkdir servbay-slim-app
1 - Зайдіть до каталогу проєкту:bash
cd servbay-slim-app
1 - Встановіть Slim через Composer: У проєктній папці виконайте інсталяцію Slim та його PSR-7 реалізації.bashЦя команда завантажить Slim та бібліотеку
composer require slim/slim "^4.0" slim/psr7 -W
1slim/psr7
в каталогvendor
та згенерує файлиcomposer.json
іcomposer.lock
.
Ініціалізація Slim-програми
- Створіть вхідний файл: Slim зазвичай працює через єдиний вхідний файл (наприклад,
public/index.php
). Створіть у корені проєкту папкуpublic
та в ній файлindex.php
.bashmkdir public touch public/index.php
1
2 - Відредагуйте вхідний файл: Відкрийте
public/index.php
і додайте базовий код для Slim:phpЦей код створює найпростішу Slim-програму — обробник GET-запиту на<?php // Підключення Composer autoload require __DIR__ . '/../vendor/autoload.php'; // Імпортуємо потрібні PSR-7 інтерфейси та фабрику Slim use Psr\Http\Message\ResponseInterface as Response; use Psr\Http\Message\ServerRequestInterface as Request; use Slim\Factory\AppFactory; // Створення екземпляра Slim $app = AppFactory::create(); // Додаємо простий маршрут: GET на корінь $app->get('/', function (Request $request, Response $response, $args) { // Запис у тіло відповіді $response->getBody()->write("Hello ServBay!"); // Повертаємо об'єкт відповіді return $response; }); // Запуск програми Slim $app->run();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22/
, який повертає відповідь "Hello ServBay!".
Налаштування сайту у ServBay
Щоб мати доступ до Slim-проєкту через браузер, потрібно створити сайт у ServBay (раніше це називалося "хост").
- Відкрийте інтерфейс програми ServBay.
- Перейдіть до модуля Сайти (Websites).
- Натисніть "Додати сайт".
- Заповніть дані на основі проєкту:
- Ім'я (Name):
My First Slim Dev Site
(або будь-яке інше) - Домен (Domain):
servbay-slim-test.local
(рекомендуємо .local або .test для локальної розробки) - Тип сайту (Website Type):
PHP
- Версія PHP (PHP Version): виберіть потрібну (наприклад,
8.3
) - Корінь сайту (Document Root): оберіть через браузер каталог
public
(шлях:/Applications/ServBay/www/servbay-slim-app/public
). Саме тут розміщеноindex.php
, куди має спрямовуватись вебсервер.
- Ім'я (Name):
- Збережіть налаштування — ServBay застосує зміни до серверної конфігурації.
Детальніше про додавання сайту читайте у Додавання першого сайту.
Доступ до Slim-сайту
Тепер відкрийте браузер і перейдіть до вашого домену, наприклад: https://servbay-slim-test.local
.
Якщо все налаштовано правильно — у вікні браузера побачите текст Hello ServBay!
. Це означає, що Slim-проєкт успішно працює під керуванням вебсервера ServBay.
Приклад інтеграції з базами даних
Slim не містить "з коробки" абстракції для роботи з БД, але дозволяє легко підключати сторонні бібліотеки. Далі — як інтегрувати MySQL, PostgreSQL за допомогою Eloquent ORM (через пакет illuminate/database
) та приклади для Memcached і Redis.
Передумови: створення БД і міграцій
Перед інтеграцією необхідно створити відповідну БД у ServBay і структуру таблиць.
- Створіть базу даних:
- Відкрийте інтерфейс ServBay, перейдіть до пакету бази даних (MySQL/PostgreSQL).
- Через інструменти адміністрування (phpMyAdmin для MySQL/MariaDB, pgAdmin для PostgreSQL) або командний клієнт створіть нову БД, наприклад —
servbay_slim_app
. - Стандартний пароль root у ServBay —
password
(перевірте/змініть у налаштуваннях).
- Встановіть і налаштуйте Phinx (міграції): Phinx — популярний інструмент міграцій для PHP.
- В каталозі проєкту
/Applications/ServBay/www/servbay-slim-app
встановіть Phinx:bashcomposer require robmorgan/phinx
1 - Ініціалізуйте Phinx:bashЦя команда створить
vendor/bin/phinx init
1phinx.yml
. Відредагуйте підключення до БД, наприклад:yamlpaths: migrations: '%%PHINX_CONFIG_DIR%%/db/migrations' seeds: '%%PHINX_CONFIG_DIR%%/db/seeds' environments: default_migration_table: phinxlog default_environment: development development: adapter: mysql # або pgsql host: 127.0.0.1 name: servbay_slim_app user: root pass: password port: 3306 # для PostgreSQL — 5432 charset: utf8mb4 collation: utf8mb4_unicode_ci version_order: creation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
- В каталозі проєкту
- Створіть файл міграції: Виконайте команду:bashВ каталозі
vendor/bin/phinx create CreateUsersTable
1db/migrations
зʼявиться новий PHP-файл. Відкрийте його, відредагуйте методchange()
:php<?php declare(strict_types=1); use Phinx\Migration\AbstractMigration; final class CreateUsersTable extends AbstractMigration { /** * Change Method. * * Write your reversible migrations using this method. * * More information on writing migrations is available here: * https://book.cakephp.org/phinx/0/en/migrations.html#the-change-method * * Remember to call "create()" or "update()" and NOT "save()" when working * with the Table class. */ public function change(): void { $table = $this->table('users'); $table->addColumn('name', 'string') ->addColumn('email', 'string', ['unique' => true]) ->addTimestamps() // Додає поля created_at і updated_at ->create(); } }
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 - Запустіть міграції: У каталозі проєкту виконайте:bashВАЖЛИВО: Створення таблиць і міграції — обовʼязкові до запуску прикладів нижче!
vendor/bin/phinx migrate
1
Використання пакета illuminate/database
Для ORM/Query Builder використовуємо компонент Laravel — illuminate/database
.
Встановіть illuminate/database: У корені проєкту виконайте:
bashcomposer require illuminate/database
1Ініціалізуйте підключення у
public/index.php
: Після рядкаrequire __DIR__ . '/../vendor/autoload.php';
, перед створенням Slim-додатку$app = AppFactory::create();
, додайте:php// ... інші require та use ... use Illuminate\Database\Capsule\Manager as Capsule; // Імпортуємо Capsule // Ініціалізація Eloquent ORM $capsule = new Capsule; // Конфігурація підключення (коригуйте driver та інші параметри) $capsule->addConnection([ 'driver' => 'mysql', // або 'pgsql' 'host' => '127.0.0.1', 'database' => 'servbay_slim_app', 'username' => 'root', 'password' => 'password', 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', // PostgreSQL — додайте параметр schema // 'schema' => 'public', ]); // Глобальна доступність $capsule->setAsGlobal(); // Запуск Eloquent $capsule->bootEloquent(); // ... створення Slim-додатку ($app = AppFactory::create();) ...
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
MySQL-приклад
Якщо у вас запущено MySQL у ServBay, БД servbay_slim_app
створено, міграцію для таблиці users
виконано — додайте нижче у public/index.php
, перед $app->run();
:
php
// ... ініціалізація та маршрут '/' ...
use Illuminate\Database\Capsule\Manager as Capsule; // Переконайтесь, що додано
// Додати користувача
$app->get('/mysql-add-user', function (Request $request, Response $response, $args) {
try {
Capsule::table('users')->insert([
'name' => 'ServBay Demo User',
'email' => 'servbay-demo-' . time() . '@servbay.test', // time() — унікальність email
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
]);
$response->getBody()->write('User added to MySQL');
} catch (\Exception $e) {
$response->getBody()->write('Error adding user: ' . $e->getMessage());
$response = $response->withStatus(500);
}
return $response;
});
// Отримати список користувачів
$app->get('/mysql-get-users', function (Request $request, Response $response, $args) {
try {
$users = Capsule::table('users')->get();
$response->getBody()->write($users->toJson());
$response = $response->withHeader('Content-Type', 'application/json');
} catch (\Exception $e) {
$response->getBody()->write('Error fetching users: ' . $e->getMessage());
$response = $response->withStatus(500);
}
return $response;
});
// ... $app->run();
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
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
Використання:
https://servbay-slim-test.local/mysql-add-user
— додає нового користувачаhttps://servbay-slim-test.local/mysql-get-users
— повертає всіх користувачів у форматі JSON
PostgreSQL-приклад
Якщо використовується PostgreSQL (налаштування в ServBay, БД та таблиця users
через Phinx створені), скоригуйте підключення у public/index.php
:
php
$capsule->addConnection([
'driver' => 'pgsql', // зміна на pgsql
'host' => '127.0.0.1',
'database' => 'servbay_slim_app',
'username' => 'root',
'password' => 'password',
'charset' => 'utf8',
'prefix' => '',
'schema' => 'public', // для PostgreSQL
]);
// ... інше ініціалізаційне кодування без змін ...
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
Перед $app->run();
додайте маршрути:
php
// ... ініціалізація та маршрут '/' ...
// ... MySQL-роути за потреби ...
use Illuminate\Database\Capsule\Manager as Capsule; // Не забудьте імпорт
// Додати користувача у PostgreSQL
$app->get('/pgsql-add-user', function (Request $request, Response $response, $args) {
try {
Capsule::table('users')->insert([
'name' => 'ServBay PG Demo User',
'email' => 'servbay-pg-demo-' . time() . '@servbay.test',
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
]);
$response->getBody()->write('User added to PostgreSQL');
} catch (\Exception $e) {
$response->getBody()->write('Error adding user: ' . $e->getMessage());
$response = $response->withStatus(500);
}
return $response;
});
// Отримати користувачів PostgreSQL
$app->get('/pgsql-get-users', function (Request $request, Response $response, $args) {
try {
$users = Capsule::table('users')->get();
$response->getBody()->write($users->toJson());
$response = $response->withHeader('Content-Type', 'application/json');
} catch (\Exception $e) {
$response->getBody()->write('Error fetching users: ' . $e->getMessage());
$response = $response->withStatus(500);
}
return $response;
});
// ... $app->run();
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
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
Використання:
https://servbay-slim-test.local/pgsql-add-user
— додає користувача у PostgreSQLhttps://servbay-slim-test.local/pgsql-get-users
— повертає список у форматі JSON
Приклад з Memcached
У ServBay підключено Memcached і модуль PHP ext-memcached
. Потрібно встановити лише PHP-клієнтську бібліотеку, наприклад, memcached/memcached
.
Встановіть Memcached-клієнт: У каталозі проєкту:
bashcomposer require memcached/memcached
1Додайте маршрут Memcached у
public/index.php
: До$app->run();
:php// ... ініціалізація та роути до БД ... // Використання Memcached $app->get('/memcached-example', function (Request $request, Response $response, $args) { // Створити екземпляр Memcached $memcached = new Memcached(); // Додаємо сервер (Default ServBay: 127.0.0.1:11211) $memcached->addServer('127.0.0.1', 11211); $cacheKey = 'my_servbay_cache_key'; // Отримати з кешу $cachedData = $memcached->get($cacheKey); if ($cachedData === false) { // Якщо кеш порожній — згенерувати і покласти у кеш $cachedData = 'Hello Memcached from ServBay! This was not cached.'; $memcached->set($cacheKey, $cachedData, 60); // TTL — 60 секунд $response->getBody()->write($cachedData); } else { // Якщо у кеші є дані — повернути з кешу $response->getBody()->write('Hello Memcached from ServBay! This was served from cache.'); } return $response; }); // ... $app->run();
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
Використання: https://servbay-slim-test.local/memcached-example
— перший запит повертає "This was not cached.", наступні (до закінчення TTL) — "This was served from cache."
Приклад з Redis
У ServBay вже є Redis і модуль PHP ext-redis
. Достатньо встановити клієнт-бібліотеку, наприклад, predis/predis
.
Встановіть Redis-клієнт: У каталозі проєкту:
bashcomposer require predis/predis
1Додайте маршрут Redis у
public/index.php
: До$app->run();
:php// ... ініціалізація, маршрути БД, Memcached ... use Predis\Client as RedisClient; // Імпортуємо Predis // Використання Redis $app->get('/redis-example', function (Request $request, Response $response, $args) { try { // Створити екземпляр Redis (Default: 127.0.0.1:6379) $redis = new RedisClient([ 'scheme' => 'tcp', 'host' => '127.0.0.1', 'port' => 6379, ]); $cacheKey = 'my_servbay_redis_cache_key'; $cachedData = $redis->get($cacheKey); if ($cachedData === null) { // Якщо нічого немає — згенерувати, записати в кеш на 60 с $cachedData = 'Hello Redis from ServBay! This was not cached.'; $redis->setex($cacheKey, 60, $cachedData); $response->getBody()->write($cachedData); } else { // Якщо знайдено у кеші $response->getBody()->write('Hello Redis from ServBay! This was served from cache.'); } } catch (\Exception $e) { // Обробка помилки підключення/операції $response->getBody()->write('Error connecting to Redis or performing operation: ' . $e->getMessage()); $response = $response->withStatus(500); } return $response; }); // ... $app->run();
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
Використання: https://servbay-slim-test.local/redis-example
— перший запит поверне "This was not cached.", всі наступні (поки кеш не збіг) — "This was served from cache."
Підсумок
Ви щойно створили Slim Framework-проєкт у локальному середовищі ServBay та налаштували функцію сайт для розміщення й доступу до нього. Ви також навчилися підключати різні пакети ServBay (MySQL, PostgreSQL, Memcached, Redis) і потрібні PHP-розширення, щоб інтегрувати БД і кеш у Slim-додаток. Завдяки ServBay процес налаштування локального середовища значно спрощується — ви можете повністю зосередитися на розробці свого застосунку.