Створення та запуск проекту ThinkPHP 8 у ServBay
У цій статті ви дізнаєтеся, як швидко створити, налаштувати та запустити PHP-проект на базі фреймворку ThinkPHP 8 з використанням потужного локального середовища розробки ServBay. ServBay надає готове до роботи оточення з PHP, веб-сервером (Caddy або Nginx) і різними базами даних, що значно спрощує підйом ThinkPHP-проектів локально.
Що таке ThinkPHP?
ThinkPHP — це відкритий, швидкий та простий об’єктно-орієнтований PHP-фреймворк, який походить з Китаю. Він слідує принципам простоти і ефективності, пропонуючи розробникам зручний набір інструментів для розробки сучасних веб-додатків. Завдяки простоті, багатофункціональності (ORM, гнучке роутінгування, шаблонізатор, кешування тощо) та активній спільноті, ThinkPHP дуже популярний серед PHP-розробників у Китаї.
Основні переваги та можливості ThinkPHP
- Простота та ефективність: Чітка структура, легкість підтримки, висока швидкість розробки.
- Повний набір функцій: Вбудовані компоненти MVC, ORM, шаблонізатор, кешування, робота із сесіями, аутентифікація, токени для форм тощо.
- Потужний ORM: Зручна робота з базами даних через об’єктно-реляційне відображення.
- Гнучкий роутінг: Підтримка різних способів визначення маршрутів, підходить для складних URL-структур.
- Розвинена екосистема: Велика кількість розширень, плагінів та активна спільнота.
- Швидки оновлення: Часті релізи з урахуванням новітніх можливостей PHP та сучасних трендів.
ThinkPHP підходить для проєктів будь-яких масштабів — від невеликих сайтів до корпоративних систем.
Підняття ThinkPHP 8 проекту у ServBay
ServBay надає ідеальне локальне середовище для розробки на ThinkPHP 8, що включає:
- Попередньо встановлені версії PHP із потрібними розширеннями.
- Вбудований веб-сервер (Caddy або Nginx) для зручного налаштування сайтів.
- Інтегровані MySQL, PostgreSQL, MongoDB, Redis, Memcached та інші бази даних.
- Вбудований менеджер залежностей Composer.
Далі покрокова інструкція зі створення ThinkPHP 8 проекту за допомогою ServBay.
Необхідні умови
Перед початком переконайтеся, що виконано наступне:
- Ви вже завантажили та встановили ServBay на macOS.
- ServBay запущено, обрано версію PHP (ThinkPHP 8 потребує PHP 8.0 або вище), а потрібні служби баз даних (MySQL, PostgreSQL, Redis, Memcached тощо) активовані. Відкрити та запустити їх можна на вкладці «Пакети» в панелі керування ServBay.
Створення проекту ThinkPHP
Рекомендуємо розміщувати локальні файли сайтів у каталозі /Applications/ServBay/www
— це спростить керування проектами у ServBay.
Перевірка наявності Composer
Composer вже вбудовано у ServBay. Зазвичай не потрібно його додатково встановлювати. Переконайтеся через ServBay-термінал, виконавши
composer --version
.Створення проекту через Composer
Відкрийте термінал macOS і виконайте команду для створення нового ThinkPHP 8-проекту у веб-каталозі ServBay:
bashcd /Applications/ServBay/www composer create-project topthink/think servbay-thinkphp-app
1
2У каталозі
/Applications/ServBay/www
зʼявиться нова папкаservbay-thinkphp-app
з ядром та залежностями ThinkPHP 8.Перехід у директорію проекту
Після створення перейдіть до каталогу з проектом:
bashcd /Applications/ServBay/www/servbay-thinkphp-app
1
Початкове налаштування проекту
Після створення проекту зробіть базові налаштування.
Оновіть дані підключення до бази даних
Файл налаштувань БД для ThinkPHP зазвичай знаходиться у
config/database.php
. Залежно від активованих у ServBay баз, відредагуйте цей файл, вказавши правильні дані для підключення.Приклад для стандартного MySQL у ServBay:
php<?php // config/database.php return [ // Конфігурація підключення за замовчуванням 'default' => env('database.driver', 'mysql'), // Конфігурації різних підключень 'connections' => [ 'mysql' => [ // Тип бази даних 'type' => 'mysql', // Адреса сервера 'hostname' => env('database.hostname', '127.0.0.1'), // Назва бази даних 'database' => env('database.database', 'servbay_thinkphp_app'), // Рекомендуємо створити окрему БД для проєкту // Логін 'username' => env('database.username', 'root'), // Пароль 'password' => env('database.password', 'password'), // Стандартний пароль ServBay: тільки для локальної розробки! // Порт 'hostport' => env('database.hostport', '3306'), // ... Інші налаштування ... ], // ... Інші підключення ... ], ];
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Важливо:
- Обов’язково змініть значення
database
на реальну назву БД для проекту (наприклад, створітьservbay_thinkphp_app
через phpMyAdmin або Adminer у ServBay). - Пароль користувача
root
у ServBay —password
. Цей пароль лише для локального використання, не застосовуйте його у продакшні! У бойових середовищах створюйте користувачів з сильними паролями та мінімальними привілеями. - Якщо для керування змінними середовища використовуєте
.env
, переконайтеся, що дані в ньому перекривають налаштування уconfig/database.php
.
- Обов’язково змініть значення
Налаштування веб-сервера
Точка входу у ThinkPHP — файл public/index.php
, і система маршрутизації вимагає підтримки правил Rewrite. Оскільки маршрути ThinkPHP відрізняються від обробки лише статичних файлів, використовуйте вбудовані правила Rewrite у ServBay.
У налаштуваннях сайту у списку Rewrite виберіть пункт ThinkPHP
та натисніть «Зберегти».
Більш детальну інструкцію дивіться у розділі Додавання першого сайту.
Додавання прикладового коду
Для перевірки працездатності роутінгу і налаштувань рекомендуємо додати простий маршрут і контролер.
Відредагуйте /Applications/ServBay/www/servbay-thinkphp-app/route/app.php
, додавши наступний маршрут GET:
php
<?php
// route/app.php
use think\facade\Route;
// Визначаємо маршрут servbay: при зверненні до /servbay викликається анонімна функція
Route::get('servbay', function () {
return 'Hello ServBay!';
});
// ... Інші маршрути ...
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
Доступ до сайту
Тепер у браузері відкрийте локальний домен і зверніться до URL із вашим тестовим маршрутом:
https://thinkphp.servbay.demo/servbay
Якщо все налаштовано правильно, у вікні з'явиться повідомлення Hello ServBay!
. Це означає, що ваш проект ThinkPHP 8 успішно працює у середовищі ServBay, а веб-сервер та PHP-FPM налаштовані коректно.
Приклад використання NoSQL баз
ServBay містить готові NoSQL-сервіси, зокрема Memcached та Redis. ThinkPHP має абстракцію кешування й легко інтегрується з цими сервісами.
Приклад із Memcached
Встановлення розширення Memcached
У ServBay розширення Memcached уже попередньо встановлено. Просто переконайтеся, що відповідний сервіс запущено (див. вкладку «Пакети» у ServBay).
Налаштування Memcached у ThinkPHP
Оновіть файл
config/cache.php
, вказавши Memcached як драйвер кешу:php<?php // config/cache.php return [ // Драйвер кешу за замовчуванням 'default' => env('cache.driver', 'memcached'), // Налаштування підключення кешу 'stores' => [ 'memcached' => [ // Тип кешу 'type' => 'memcached', // Список серверів 'host' => '127.0.0.1', // Стандартна адреса Memcached у ServBay 'port' => 11211, // Стандартний порт Memcached у ServBay 'persistent' => false, 'expire' => 0, 'timeout' => 0, 'prefix' => '', ], // ... Інші налаштування ... ], ];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23Робота з Memcached у коді
Скористайтеся фасадом
Cache
у контролері чи роутах для кешування:php<?php use think\facade\Cache; use think\facade\Route; Route::get('/memcached-example', function () { // Записуємо значення в кеш на 600 секунд Cache::set('my_memcached_key', 'This value is from Memcached!', 600); // Зчитуємо значення з кешу $value = Cache::get('my_memcached_key'); return 'Value from Memcached: ' . $value; });
1
2
3
4
5
6
7
8
9
10
11
12
13Відвідайте
https://thinkphp.servbay.demo/memcached-example
для перевірки.
Приклад із Redis
Встановлення розширення Redis
Розширення Redis також встановлено у стандартній збірці ServBay. Переконайтеся, що сервіс Redis активний (розділ «Пакети»).
Налаштування Redis-драйвера
Оновіть
config/cache.php
, щоб використовувати Redis як драйвер кешу:php<?php // config/cache.php return [ // Драйвер кешу за замовчуванням 'default' => env('cache.driver', 'redis'), // Налаштування підключення кешу 'stores' => [ 'redis' => [ // Тип кешу 'type' => 'redis', // Адреса сервера 'host' => env('cache.host', '127.0.0.1'), // Стандартна адреса Redis у ServBay // Порт 'port' => env('cache.port', 6379), // Стандартний порт Redis у ServBay // Пароль (за замовчуванням в ServBay не встановлено) 'password' => env('cache.password', ''), // Порожньо — стандарт для ServBay 'select' => 0, 'timeout' => 0, 'expire' => 0, 'persistent' => false, 'prefix' => '', ], // ... Інші налаштування ... ], ];
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Зверніть увагу: Redis у ServBay за замовчуванням без пароля. Якщо ви задали пароль самостійно, оновіть це поле.
Робота з Redis у коді
Збереження й читання через фасад
Cache
:php<?php use think\facade\Cache; use think\facade\Route; Route::get('/redis-example', function () { // Збереження в кеш (постійне, або вказати тривалість) Cache::set('my_redis_key', 'Hello from Redis!'); // Отримання значення $value = Cache::get('my_redis_key'); return 'Value from Redis: ' . $value; });
1
2
3
4
5
6
7
8
9
10
11
12
13Перейдіть за адресою
https://thinkphp.servbay.demo/redis-example
, щоб перевірити роботу.
Приклади для реляційних баз даних
ServBay інтегрує провідні реляційні БД — MySQL та PostgreSQL, а ThinkPHP ORM зручно з ними взаємодіє.
Використання інструменту міграцій ThinkPHP
Міграції спрощують керування змінами в структурі БД і командну роботу.
Встановлення розширення міграцій
У корені проекту через Composer встановіть пакет для міграцій:
bashcd /Applications/ServBay/www/servbay-thinkphp-app composer require topthink/think-migration
1
2Створення файлу міграції
Виконайте команду для генерації нового файлу (для таблиці users):
bashphp think migrate:create CreateUserTable
1Файл створиться у
database/migrations
(наприклад,20231027100000_create_user_table.php
).Редагування файлу міграції
Відкрийте його, реалізуйте створення таблиці методі
up()
абоchange()
:php<?php // database/migrations/YYYYMMDDHHMMSS_create_user_table.php use think\migration\Migrator; use think\migration\db\Column; class CreateUserTable extends Migrator { /** * Зворотна міграція через метод change(). */ public function change() { // Створення таблиці users $table = $this->table('users'); $table->addColumn('name', 'string', ['limit' => 50, 'comment' => 'Ім’я користувача']) ->addColumn('email', 'string', ['limit' => 100, 'comment' => 'Адреса електронної пошти']) ->addIndex(['email'], ['unique' => true]) // Унікальний індекс на email ->addTimestamps() // created_at та updated_at ->create(); } // Альтернативно — використовуйте separately up() / down() (див. оригінал). }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24Запуск міграцій
Зробіть міграцію через термінал у каталозі проекту:
bashphp think migrate:run
1На успіх — у базі з’явиться нова таблиця
users
.
MySQL-приклад
Припустимо, у вас активовано MySQL у ServBay та прописано правильне підключення (config/database.php
).
Перевірте підключення до MySQL
Орієнтуйтеся на зразок у попередньому розділі «Початкове налаштування проекту».
Додавання нового користувача у коді
Використовуючи фасад
Db
, додайте нового користувача:php<?php use think\facade\Db; use think\facade\Route; Route::get('/mysql-add-user', function () { try { Db::table('users')->insert([ 'name' => 'ServBay Demo User', 'email' => '[email protected]', // Демо-емейл бренду 'created_at' => date('Y-m-d H:i:s'), // Дата створення 'updated_at' => date('Y-m-d H:i:s'), ]); return 'User added successfully!'; } catch (\Exception $e) { return 'Error adding user: ' . $e->getMessage(); } });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17Перевірте:
https://thinkphp.servbay.demo/mysql-add-user
Читання даних користувачів
Приклад вибірки всіх користувачів:
php<?php use think\facade\Db; use think\facade\Route; Route::get('/mysql-users', function () { $users = Db::table('users')->select(); // Отримання всіх return json($users); // Виведення у JSON });
1
2
3
4
5
6
7
8Перевірте:
https://thinkphp.servbay.demo/mysql-users
Приклад з PostgreSQL
Підніміть службу PostgreSQL у ServBay й пропишіть підключення у config/database.php
.
Налаштуйте зʼєднання з PostgreSQL
Перевірте наявність секції PGSQL у вашому конфіг-файлі (налаштування — згідно реального сервера та проектної БД):
php<?php // config/database.php (фрагмент) return [ // ... інші налаштування ... 'connections' => [ // ... MySQL конфіг ... 'pgsql' => [ // Тип БД 'type' => 'pgsql', // Адреса сервера 'hostname' => env('database.hostname', '127.0.0.1'), // БД 'database' => env('database.database', 'servbay_thinkphp_app'), // окрема БД для проекту // Користувач 'username' => env('database.username', 'root'), // Пароль 'password' => env('database.password', 'password'), // За замовчуванням "password" у ServBay // Порт 'hostport' => env('database.hostport', '5432'), // Стандарт для PostgreSQL // ... інші параметри ... ], // ... інші з’єднання ... ], ];
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Важливо:
- Як і з MySQL, створіть окрему БД для проекту й укажіть у налаштуваннях.
- Пароль
root
у PostgreSQL — за умовчаннямpassword
, не використовуйте у продакшені.
Додавання записів у PostgreSQL
Операція через фасад
Db
з явно вказаним PGSQL-підключенням:php<?php use think\facade\Db; use think\facade\Route; Route::get('/pgsql-add-user', function () { try { Db::connect('pgsql')->table('users')->insert([ // PGSQL-з’єднання 'name' => 'ServBay PgSQL User', 'email' => '[email protected]', // Демо-емейл бренду 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s'), ]); return 'PostgreSQL User added successfully!'; } catch (\Exception $e) { return 'Error adding PostgreSQL user: ' . $e->getMessage(); } });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17Перевірте:
https://thinkphp.servbay.demo/pgsql-add-user
Читання записів PostgreSQL
Запит з використанням PGSQL-зʼєднання:
php<?php use think\facade\Db; use think\facade\Route; Route::get('/pgsql-users', function () { $users = Db::connect('pgsql')->table('users')->select(); // отримуємо всіх користувачів return json($users); });
1
2
3
4
5
6
7
8Доступно за адресою:
https://thinkphp.servbay.demo/pgsql-users
Висновок
Виконавши наведені кроки, ви повноцінно розгорнули проект ThinkPHP 8 у локальному середовищі ServBay: від створення через Composer, налаштування веб-сервера Caddy для роутінгу ThinkPHP, до інтеграції баз даних MySQL, PostgreSQL, Memcached та Redis.
ServBay значно спрощує локальну роботу з PHP-фреймворками на зразок ThinkPHP — ви заощаджуєте час на підготовці оточення і зосереджуєтеся на розробці бізнес-логіки. Продовжуйте створювати свій ThinkPHP-додаток, ефективно використовуючи широкий набір інструментів та служб від ServBay.