Создание и запуск проекта ThinkPHP 8 в ServBay
В этой статье вы узнаете, как использовать мощную локальную среду разработки ServBay для быстрой установки, настройки и запуска PHP-проекта на фреймворке ThinkPHP 8. ServBay предоставляет готовую PHP-среду, веб-сервер (Caddy или Nginx) и различные базы данных, значительно упрощая локальную разработку проектов ThinkPHP.
Что такое ThinkPHP?
ThinkPHP — это популярный в Китае open-source объектно-ориентированный PHP-фреймворк для быстрого и простого веб-разработки. Он придерживается принципов лаконичности и эффективности, помогая разработчикам создавать современные веб-приложения. ThinkPHP активно применяется в сфере PHP-разработки в Китае благодаря простоте, обширному функционалу (мощная ORM, гибкие маршруты, встроенный шаблонизатор, поддержка кеширования и др.) и поддержке большого сообщества.
Основные преимущества и особенности ThinkPHP
- Простота и эффективность: Легкая структура, понятный код и высокая скорость разработки.
- Широкий функционал: Встроенные модули MVC, ORM, шаблонизатор, кеширование, управление сессиями, права доступа, защита форм и многое другое.
- Мощная ORM: Упрощённая работа с базой данных через объектное представление таблиц.
- Гибкая маршрутизация: Гибко настраиваемые маршруты и поддержка сложных URL-структур.
- Богатая экосистема: Множество расширений, плагинов и большое активное сообщество.
- Постоянные обновления: Регулярный выход новых версий, соответствие современным стандартам PHP и web-разработки.
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
ServBay рекомендует хранить все локальные сайты в папке /Applications/ServBay/www
для удобного управления.
Проверьте установлен ли Composer
В дистрибутиве ServBay Composer установлен изначально, дополнительных действий не требуется. Проверьте версию командой
composer --version
в терминале ServBay.Создайте проект через 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
Базовая настройка проекта
После создания проекта выполните базовую настройку.
Настройте подключение к базе данных
Конфигурации для подключения к БД — в файле
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
—password
. Не используйте этот пароль в продакшене! В рабочих окружениях создавайте отдельных пользователей с разрешениями и сильными паролями. - Если для управления переменными окружения используется файл
.env
, убедитесь, что его параметры перекрывают стандартные изconfig/database.php
.
- Обязательно укажите в поле
Настройка веб-сервера
Точка входа ThinkPHP — файл public/index.php
, обработка маршрутов требует поддержки правил URL rewrite. Для этого ServBay предлагает преднастроенные шаблоны rewrite.
В настройках вашего сайта в выпадающем меню Rewrite выберите ThinkPHP
и сохраните.
Детальные шаги настройки сайта смотрите в Добавление первого сайта.
Добавление тестового кода
Для проверки работы сайта и маршрутизации ThinkPHP добавьте в проект простой роут и контроллер.
Откройте /Applications/ServBay/www/servbay-thinkphp-app/route/app.php
и вставьте следующий код для создания GET-маршрута:
<?php
// route/app.php
use think\facade\Route;
// Определяем маршрут servbay: при обращении по /servbay выполнится анонимная функция
Route::get('servbay', function () {
return 'Hello ServBay!';
});
// ... другие маршруты ...
2
3
4
5
6
7
8
9
10
11
Доступ к сайту
Теперь откройте браузер и перейдите по адресу, соответствующему вашему домену и пути примера маршрута:
https://thinkphp.servbay.demo/servbay
При правильной настройке вы увидите сообщение Hello ServBay!
, значит всё успешно работает: ThinkPHP 8 и сервер PHP-FPM запущены на ServBay.
Пример работы с NoSQL-базами
ServBay включает в себя NoSQL-серверы Memcached и Redis. ThinkPHP поддерживает эти сервисы через абстракции кеширования.
Пример с Memcached
Проверьте наличие расширения Memcached
PHP-пакет ServBay уже содержит это расширение. Убедитесь, что сам сервис Memcached запущен во вкладке "Пакеты" в ServBay.
Настройте 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 '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 в коде
Работайте с кешем Memcached через Facade
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 установлено в PHP-пакете ServBay по умолчанию. Активируйте службу Redis во вкладке "Пакеты".
Настройте Redis-кеширование
В файле
config/cache.php
добавьте следующее:php<?php // config/cache.php return [ // Драйвер кеша по умолчанию 'default' => env('cache.driver', 'redis'), // Подключения 'stores' => [ 'redis' => [ // Тип кеша 'type' => 'redis', // Адрес сервера 'host' => env('cache.host', '127.0.0.1'), // Стандартный адрес Redis // Порт 'port' => env('cache.port', 6379), // Обычный порт Redis // Пароль (по умолчанию его нет) '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 в коде
Воспользуйтесь фасадом
Cache
для работы с 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
для проверки.
Пример работы с реляционными БД
ServBay поддерживает основные СУБД: MySQL, PostgreSQL. В ThinkPHP есть ORM и фасады для простой работы с ними.
Использование миграций ThinkPHP
Миграции — удобный инструмент ThinkPHP для версионирования структуры базы данных, особенно полезен при командной разработке.
Установка компонента для миграций
Из корня проекта выполните в терминале:
bashcd /Applications/ServBay/www/servbay-thinkphp-app composer require topthink/think-migration
1
2Создание файла миграции
Сгенерируйте заново файл миграции для таблицы пользователей:
bashphp think migrate:create CreateUserTable
1Будет создан файл с датой и вашим названием в папке
database/migrations
(например,20231027100000_create_user_table.php
).Редактирование миграции
Внесите структуру таблицы
users
в методchange()
: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Применение миграций
В терминале ServBay в каталоге проекта выполните:
bashphp think migrate:run
1После успешного запуска появится таблица
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' => '[email protected]', // Тестовая почта бренда '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
.Чтение данных пользователей из MySQL
Для вывода списка используйте:
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
Аналогично работе с MySQL, проверьте, что сервис 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'), // Порт 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
27Внимание:
- Как и для MySQL, рекомендуется отдельная база под проект и свой конфиг.
- Стандартный пароль пользователя
root
—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]', // Демонстрационный e-mail бренда // Время может потребовать ручного указания, зависит от миграции и версии ThinkPHP '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
.Чтение пользователей из PostgreSQL
Точно так же — укажите нужное подключение:
php<?php use think\facade\Db; use think\facade\Route; Route::get('/pgsql-users', function () { $users = Db::connect('pgsql')->table('users')->select(); // Получить пользователей из PostgreSQL return json($users); // Вернуть JSON-ответ });
1
2
3
4
5
6
7
8Перейдите по адресу
https://thinkphp.servbay.demo/pgsql-users
для просмотра данных изusers
.
Итоги
Вы научились быстро создавать, настраивать и запускать проект на ThinkPHP 8 в ServBay: использовать встроенный Composer, правильно подключать веб-сервер Caddy и применять rewrite-правила, а также взаимодействовать с MySQL, PostgreSQL, Memcached и Redis из пакета ServBay.
ServBay заметно сокращает время развертывания среды для фреймворков на PHP вроде ThinkPHP, позволяя сосредоточиться на бизнес-логике. Теперь смело продолжайте разрабатывать своё приложение, используя всё богатство возможностей ServBay!