Створення та запуск проекту ThinkPHP 8 у ServBay
Ця стаття покроково розкаже, як скористатися потужним локальним середовищем ServBay для швидкого створення, налаштування та запуску PHP-проекту на базі фреймворка ThinkPHP 8. ServBay пропонує заздалегідь налаштоване оточення PHP, веб-сервер (Caddy або Nginx), а також різноманітні бази даних, що значно спрощує старт та налаштування локального проекту ThinkPHP.
Що таке ThinkPHP?
ThinkPHP — це відкритий, простий та швидкий об'єктно-орієнтований PHP-фреймворк, який виник у Китаї. Він дотримується принципів простоти й ефективності, забезпечує розробників зручним набором інструментів для створення сучасних веб-додатків. Серед ключових переваг: простота використання, потужний ORM, гнучке роутінг, вбудований шаблонізатор, підтримка кешування та активне ком’юніті. У сфері PHP-розробки Китаю ThinkPHP надзвичайно популярний.
Основні можливості та переваги 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 на macOS або Windows.
- Запустіть 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-app1
2В результаті у
/Applications/ServBay/wwwствориться папкаservbay-thinkphp-appзі всіма файлами ThinkPHP 8 та залежностями.Вхід у папку проекту
Перейдіть в директорію проекту:
bashcd /Applications/ServBay/www/servbay-thinkphp-app1
Початкове налаштування проекту
Після створення проекту виконайте базову конфігурацію.
Налаштування доступу до бази даних
Вся інформація для підключення до бази даних прописується у файлі
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вкажіть точну назву створеної бази (наприклад, через phpMyAdmin або Adminer у ServBay можете створитиservbay_thinkphp_app). - Пароль користувача
rootза замовчуванням —password. Це лише для локальної розробки — у продукції встановіть складний пароль та мінімальні права! - Якщо використовуєте
.envдля змінних оточення, переконайтесь, що вони перекривають дефолтні значення зconfig/database.php.
- В полі
Налаштування веб-сервера
Точка входу ThinkPHP — файл public/index.php. Система маршрутизації працює через Rewrite-правила. Необхідно застосувати відповідний шаблон Rewrite у ServBay.
У налаштуваннях сайту виберіть тип Rewrite — ThinkPHP — з випадаючого списку та збережіть.
Детально процес наведено в Додавання першого сайту.
Додавання тестового коду
Для перевірки коректності конфігурації та роботи роутінгу ThinkPHP — створіть простий маршрут і контролер.
Відредагуйте /Applications/ServBay/www/servbay-thinkphp-app/route/app.php, додайте простий GET-маршрут:
php
<?php
// route/app.php
use think\facade\Route;
// Оголошення маршруту /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
Доступ до сайту
Після налаштування відкрийте браузер, перейдіть за локальним доменом та шляхом до тестового маршруту:
https://thinkphp.servbay.demo/servbay
Якщо все впорядку, побачите Hello ServBay!. Це означає, що проект ThinkPHP 8 успішно працює під керуванням ServBay із коректними налаштуваннями PHP та веб-сервера.
Приклади з NoSQL базами
ServBay поставляється з різними NoSQL-сервісами: Memcached та Redis. ThinkPHP підтримує роботу з кешами через абстракцію, тому інтеграція цих сервісів надзвичайно проста.
Мемкешед (Memcached)
Перевірка розширення Memcached
В ServBay PHP вже встановлено розширення Memcached. Переконайтесь, що сам сервіс Memcached активний через вкладку «Пакети».
Налаштування кеша Memcached
У файлі
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 для роботи з Memcached:
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
В ServBay PHP вже є розширення Redis. Переконайтесь, що сам 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', ''), // без пароля '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 в коді
Напишіть у контролері/маршруті операції з Redis:
php<?php use think\facade\Cache; use think\facade\Route; Route::get('/redis-example', function () { // Встановити кеш (без терміну дії, або третій аргумент для TTL) 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.
Робота з реляційними базами (SQL)
ServBay включає MySQL та PostgreSQL. ThinkPHP ORM чудово підтримує роботу з цими СУБД.
Використання інструменту міграцій ThinkPHP
ThinkPHP підтримує міграції для структури бази, це зручно для командної роботи та контролю версій.
Встановлення розширення для міграцій
В корені проекту виконайте команду для підключення міграцій:
bashcd /Applications/ServBay/www/servbay-thinkphp-app composer require topthink/think-migration1
2Створіть міграційний файл
Згенеруйте файл, наприклад, для таблиці
users:bashphp think migrate:create CreateUserTable1У папці
database/migrationsствориться новий PHP-файл, з назвою типу20231027100000_create_user_table.php.Редагуйте файл міграції
Відкрийте файл у
database/migrationsта опишіть структуруusersу методіup():php<?php // database/migrations/YYYYMMDDHHMMSS_create_user_table.php use think\migration\Migrator; use think\migration\db\Column; class CreateUserTable extends Migrator { /** * Change Method. * * Write your reversible migrations using this method. * * More information on writing migrations is available here: * http://docs.phinx.org/en/latest/migrations.html#the-change-method * * The following commands can be used in this method and Phinx will * automatically reverse them when rolling back: * * createTable * renameTable * addColumn * addCustomColumn * renameColumn * addIndex * addForeignKey * createDatabase * renameDatabase * dropTable * dropColumn * dropIndex * dropForeignKey */ public function change() { // Створення таблиці методом createTable $table = $this->table('users'); $table->addColumn('name', 'string', ['limit' => 50, 'comment' => 'Ім’я користувача']) ->addColumn('email', 'string', ['limit' => 100, 'comment' => 'E-mail користувача']) ->addIndex(['email'], ['unique' => true]) // Унікальний індекс ->addTimestamps() // created_at та updated_at ->create(); } // Якщо не використовуєте change, можна окремо описати up і down /* public function up() { $table = $this->table('users'); $table->addColumn('name', 'string', ['limit' => 50, 'comment' => 'Ім’я користувача']) ->addColumn('email', 'string', ['limit' => 100, 'comment' => 'E-mail користувача']) ->addIndex(['email'], ['unique' => true]) ->addTimestamps() ->create(); } public function down() { $this->dropTable('users'); } */ }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Запуск міграції
Переконайтесь, що ви у корені проекту, запустіть команду:
bashphp think migrate:run1Якщо все добре, у вибраній базі даних з’явиться таблиця
users.
MySQL практичний приклад
Вважаємо, що сервіс MySQL запущений і config/database.php правильно налаштований.
Налаштування MySQL
Перевірте попередній приклад налаштування MySQL (“Початкове налаштування проекту”).
Запис у таблицю користувача
За допомогою фасаду
Dbабо ORM додайте запис: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' => 'demo@servbay.demo', // брендований приклад e-mail 'created_at' => date('Y-m-d H:i:s'), // ручний таймстемп, якщо addTimestamps() не додає самостійно '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.Отримання даних користувачів
Виведіть дані у вигляді JSON:
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 стартував, і конфігурація у файлі виконана.
Налаштування підключення PostgreSQL
У
config/database.phpдодайте такі параметри (або налаштуйте відповідно):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'), // стандартний пароль ServBay, тільки для локального середовища! // Порт 'hostport' => env('database.hostport', '5432'), // ... додаткове ... ], // ... інші підключення ... ], ];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Важливо:
- Створіть окрему базу для проекту та вкажіть її у конфігурації.
- Для PostgreSQL пароль користувача
rootтакожpassword. Використовуйте лише локально!
Запис даних користувача
Вставка записів з явною вказівкою pgsql:
php<?php use think\facade\Db; use think\facade\Route; Route::get('/pgsql-add-user', function () { try { Db::connect('pgsql')->table('users')->insert([ 'name' => 'ServBay PgSQL User', 'email' => 'pgsql-demo@servbay.demo', // брендований приклад e-mail // Для timestamp — ручне встановлення '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
18Перевірте запис за адресою
https://thinkphp.servbay.demo/pgsql-add-user.Вивід даних користувачів
Ось приклад отримання даних (із зазначеним 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); // Повертає список користувачів у JSON });1
2
3
4
5
6
7
8Перевірте за адресою
https://thinkphp.servbay.demo/pgsql-users.
Підсумок
Тепер ви знаєте, як створити, налаштувати й запустити проект ThinkPHP 8 із локальним середовищем ServBay. Ви навчилися використовувати Composer для створення проекту, налаштовувати веб-сервер Caddy для правильного роутінгу, підключати бази MySQL, PostgreSQL, Memcached і Redis.
ServBay суттєво спрощує створення локального оточення для фреймворків на кшталт ThinkPHP, дає змогу зосередитись на бізнес-логіці та комфортній розробці. Продовжуйте будувати ваш додаток на ThinkPHP, повністю використовуючи можливості й переваги ServBay!
