Створення та запуск проекту Slim у ServBay
У цьому гайді ви дізнаєтеся, як швидко створити, налаштувати та запустити проект на основі PHP Slim Framework у потужному локальному середовищі веб-розробки ServBay. ServBay надає інтегровані пакети PHP, веб-серверів (Caddy/Nginx/Apache) і різноманітних СУБД, що робить його ідеальною платформою для розробки на Slim.
Що таке Slim?
Slim — це легкий PHP мікрофреймворк, створений для швидкої розробки простих, але функціональних веб-додатків та API. Він забезпечує базові функції маршрутизації, обробки запитів і відповідей та ідеально підходить для проектів, які потребують швидкого запуску, а також як основа для більш складних рішень.
Основні переваги та особливості Slim
- Легковажність: Slim має компактне ядро, мінімальні вимоги до ресурсів і блискавичний старт, підходить для розробки малих і середніх додатків або мікросервісів.
- Гнучкість: Фреймворк легко розширюється, інтегрується з будь-якими сторонніми бібліотеками, такими як шаблонізатори, ORM, інструменти автентифікації тощо — ви можете вибрати оптимальні рішення для свого проєкту.
- Зручність використання: Завдяки простому API та зрозумілій документації, розробники швидко опановують Slim та приступають до роботи.
- Потужна маршрутизація: Підтримка різних HTTP-методів (GET, POST, PUT, DELETE тощо), гнучкі маршрути, групування маршрутів, middleware і параметризація.
- Підтримка middleware: Middleware дозволяють виконувати додаткові дії до передачі запиту в додаток чи до відправки відповіді клієнту — наприклад, автентифікація, логування, CORS тощо.
Slim — ідеальний вибір для RESTful API, швидкого прототипування або точкових, автономних рішень.
Як створити та запустити проект Slim у ServBay
У цій інструкції ми скористаємося готовим оточенням PHP у ServBay та функцією сайтів, щоб налаштувати веб-сервер і забезпечити доступ до вашого проекту Slim.
Перед початком роботи
Перед стартом переконайтеся, що:
- Встановлено та запущено ServBay: ServBay успішно встановлений на вашому macOS або Windows, а додаток працює.
- Composer вже інтегрований: Composer постачається у складі ServBay, окремо встановлювати не потрібно.
Створення проекту Slim
Рекомендується зберігати всі ваші сайти в одній директорії для зручного керування та налаштування у ServBay:
- macOS:
/Applications/ServBay/www
- Windows:
C:\ServBay\www
Перейдіть до кореневої директорії сайтів ServBay:
macOS:
bashcd /Applications/ServBay/www
1Windows:
cmdcd C:\ServBay\www
1Створіть папку для проекту:
bashmkdir servbay-slim-app
1Перейдіть у створену директорію:
bashcd servbay-slim-app
1Встановіть Slim через Composer: В директорії вашого проекту встановіть Slim і реалізацію PSR-7.
bashcomposer require slim/slim "^4.0" slim/psr7 -W
1Ця команда завантажить Slim та бібліотеку
slim/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-запит до URL<?php // Підключення автозавантаження Composer 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
Щоб відкрити проект в браузері, потрібно налаштувати сайт (у старих версіях — “хост”) у 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
вашого проекту:- macOS:
/Applications/ServBay/www/servbay-slim-app/public
- Windows:
C:\ServBay\www\servbay-slim-app\public
Веб-сервер має направляти запити на папку з
index.php
, тому вибираємо самеpublic
.- macOS:
- Збережіть налаштування сайту — ServBay автоматично оновить конфігурацію веб-сервера.
Детальніше щодо налаштування сайтів у ServBay дивіться в Додавання першого сайту.
Як отримати доступ до Slim-сайту
Після налаштування сайту відкрийте браузер та перейдіть за адресою https://servbay-slim-test.local
.
Якщо все коректно, ви побачите на сторінці текст Hello ServBay!
, що означає: Slim-додаток успішно працює під керуванням веб-сервера ServBay.
Приклади інтеграції з базами даних
Сам Slim не має вбудованої роботи з базами даних, але чудово інтегрується з різними бібліотеками. Далі показане підключення MySQL та PostgreSQL через Eloquent ORM (illuminate/database
компонент з Laravel), а також приклади для Memcached та Redis.
Перший крок: створення БД і міграції
Перед інтеграцією бази даних потрібно створити її у ServBay і визначити структуру таблиць.
- Створіть базу даних:
- Відкрийте ServBay та перейдіть у розділ обраної СУБД (MySQL чи PostgreSQL).
- Через phpMyAdmin для MySQL/MariaDB або pgAdmin для PostgreSQL (або CLI) створіть нову БД, наприклад
servbay_slim_app
. - Пароль root у ServBay за замовчуванням —
password
(можна змінити або переглянути в інтерфейсі).
- Встановіть та налаштуйте Phinx (інструмент міграцій):
- У корені проекту встановіть Phinx за допомогою Composer:
- macOS:
/Applications/ServBay/www/servbay-slim-app
- Windows:
C:\ServBay\www\servbay-slim-app
bashcomposer require robmorgan/phinx
1 - macOS:
- Ініціалізуйте 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 # для MySQL, для PostgreSQL — 5432 charset: utf8mb4 # рекомендовано для MySQL collation: utf8mb4_unicode_ci # рекомендовано для MySQL version_order: creation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
- У корені проекту встановіть Phinx за допомогою Composer:
- Створіть файл міграції:bashЦе створить PHP-файл у
vendor/bin/phinx create CreateUsersTable
1db/migrations
. Відкрийте його і додайте структуруusers
: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
Використаємо Eloquent ORM із Laravel — компонент illuminate/database
.
Встановіть illuminate/database:
- macOS:
/Applications/ServBay/www/servbay-slim-app
- Windows:
C:\ServBay\www\servbay-slim-app
bashcomposer require illuminate/database
1- macOS:
Ініціалізація з'єднання в
public/index.php
: Вставте наступний код післяrequire __DIR__ . '/../vendor/autoload.php';
і перед створенням Slim-додатку: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', // для MySQL 'collation' => 'utf8mb4_unicode_ci', // для MySQL 'prefix' => '', // Для PostgreSQL додайте schema // 'schema' => 'public', ]); // Робимо DB-класи глобально доступними $capsule->setAsGlobal(); // Запускаємо Eloquent $capsule->bootEloquent(); // ... створення Slim-додатку (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', // уникальний 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
— додає користувача в MySQL.https://servbay-slim-test.local/mysql-get-users
— повертає таблицю користувачів у JSON.
Приклад для PostgreSQL
Якщо ви запустили PostgreSQL-пакет у ServBay, створили БД, міграція створила таблицю users
(налаштування Phinx: adapter pgsql, port 5432).
Вкажіть у коді Slim підключення до PostgreSQL — змініть параметр driver
на pgsql
і додайте schema
:
php
$capsule->addConnection([
'driver' => 'pgsql', // pgsql
'host' => '127.0.0.1',
'database' => 'servbay_slim_app',
'username' => 'root',
'password' => 'password',
'charset' => 'utf8', // для PostgreSQL
'prefix' => '',
'schema' => 'public',
]);
// ... інша ініціалізація Eloquent ...
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
Додайте маршрути до public/index.php
:
php
// ... попередні ініціалізації, маршрут '/', MySQL-маршрути (опціонально) ...
use Illuminate\Database\Capsule\Manager as Capsule; // Переконайтеся, що імпортовано
// Додавання користувача
$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;
});
// Отримання користувачів
$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
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/pgsql-add-user
— додає користувача у PostgreSQL.https://servbay-slim-test.local/pgsql-get-users
— повертає користувачів з PostgreSQL у JSON.
Приклад Memcached
ServBay містить Memcached та PHP-розширення ext-memcached
. Для роботи потрібно налаштувати PHP-клієнт (memcached/memcached
).
Встановіть клієнт:
- macOS:
/Applications/ServBay/www/servbay-slim-app
- Windows:
C:\ServBay\www\servbay-slim-app
bashcomposer require memcached/memcached
1- macOS:
Додайте маршрут Memcached у
public/index.php
:php// ... попередні ініціалізації, БД маршрути ... // Memcached-маршрут $app->get('/memcached-example', function (Request $request, Response $response, $args) { // Створюємо клієнт Memcached $memcached = new Memcached(); // Додаємо сервер (типова адреса у 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.'; // Кешуємо на 60 секунд $memcached->set($cacheKey, $cachedData, 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
28
Доступ: 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:
- macOS:
/Applications/ServBay/www/servbay-slim-app
- Windows:
C:\ServBay\www\servbay-slim-app
bashcomposer require predis/predis
1- macOS:
Додайте маршрут Redis у
public/index.php
:php// ... попередні ініціалізації та маршрути ... // ... Memcached (опціонально) ... use Predis\Client as RedisClient; // Імпорт класу Predis // Redis-маршрут $app->get('/redis-example', function (Request $request, Response $response, $args) { try { // Створюємо екземпляр клієнта (типова адреса — 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) { // Якщо кеш порожній — створюємо й заносимо в кеш із TTL 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
37
38
Доступ: 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 суттєво спрощує локальну розробку, даючи можливість сфокусуватися саме на коді вашого додатку Slim.