Создание и запуск проекта ThinkPHP 8 в ServBay
В этом руководстве вы узнаете, как с помощью ServBay — мощной локальной среды для веб-разработки — быстро создать, настроить и запустить PHP-проект на фреймворке ThinkPHP 8. ServBay предлагает предустановленный PHP с необходимыми расширениями, веб-серверы Caddy или Nginx, а также интеграцию с популярными базами данных, что значительно упрощает подготовку локального окружения для разработки на ThinkPHP.
Что такое ThinkPHP?
ThinkPHP — это популярный в Китае, открытый и быстрый объектно-ориентированный фреймворк для PHP. Он построен на принципах простоты и высокой эффективности, предоставляя разработчикам удобный набор инструментов для создания современных веб-приложений. Благодаря простоте использования, богатому функционалу (например, мощная ORM, гибкая маршрутизация, встроенный шаблонизатор, поддержка кеширования) и активному сообществу, ThinkPHP широко применяется для PHP-разработки в Китае.
Основные преимущества и возможности ThinkPHP
- Простота и скорость: Чистая архитектура, понятная структура кода и высокая скорость разработки.
- Полный функционал: Встроенные компоненты для веб-разработки — MVC, ORM, шаблонизатор, кеширование, управление сессиями, авторизация, CSRF-токены и многое другое.
- Мощная 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 (см. документацию), дополнительная установка не требуется. Проверить версию можно через команду
composer --version
в терминале ServBay.Создайте проект ThinkPHP с помощью 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'), // Пароль "password" используется только для локальной разработки! // Порт '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. Маршруты ThinkPHP отличаются от стандартного роутинга для статических файлов, поэтому в ServBay необходимо применить предустановленные Rewrite-правила для ThinkPHP.
В настройках сайта в ServBay выберите в выпадающем списке Rewrite-правил вариант ThinkPHP
и сохраните изменения.
Подробнее процесс добавления сайта описан в разделе Добавление первого сайта.
Добавление тестового кода
Чтобы проверить работоспособность конфигурации и базовые роуты 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
Просмотр сайта
После настройки откройте браузер и перейдите по вашему домену и адресу тестового маршрута:
https://thinkphp.servbay.demo/servbay
Если всё настроено верно, вы увидите сообщение Hello ServBay!
— ваш проект ThinkPHP 8 успешно запущен в окружении ServBay, а веб-сервер и PHP-FPM работают корректно.
Пример использования NoSQL баз данных
ServBay поддерживает различные NoSQL решения, такие как Memcached и Redis. ThinkPHP предоставляет абстракцию над кешем, что позволяет легко интегрировать эти сервисы.
Пример Memcached
Установка расширения Memcached
Расширение Memcached уже включено в PHP-пакет 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 в 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 в коде
Для обращения к Memcached используйте фасад
Cache
внутри контроллеров или роутов:php<?php use think\facade\Cache; use think\facade\Route; Route::get('/memcached-example', function () { // Установить значение кеша с временем жизни 600 секунд Cache::set('my_memcached_key', 'Значение из 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
задайте 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 // Пароль (по умолчанию отсутствует) 'password' => env('cache.password', ''), // В ServBay Redis без пароля по умолчанию '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 пароль не задаётся. Если вы установили пароль вручную, обновите поле
password
.Использование Redis в коде
Для взаимодействия с Redis используйте фасад
Cache
внутри контроллеров или роутов: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, как самые востребованные реляционные БД. ORM ThinkPHP позволяет эффективно с ними работать.
Использование инструмента миграции базы данных ThinkPHP
В ThinkPHP для управления структурой БД часто применяются миграции. Это облегчает командную работу и отслеживание изменений.
Установите инструмент миграции
В корне проекта выполните команду Composer для установки расширения миграций:
bashcd /Applications/ServBay/www/servbay-thinkphp-app composer require topthink/think-migration
1
2Создайте файл миграции
Сгенерируйте новый файл миграции с помощью консоли ThinkPHP, например, для таблицы
users
:bashphp think migrate:create CreateUserTable
1Файл будет создан в директории
database/migrations
, его имя будет содержать дату/время и имя (например,20231027100000_create_user_table.php
).Отредактируйте файл миграции
В файле миграции в методе
up()
пропишите структуру таблицыusers
: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(); // Создать } // Можно отдельно определить методы 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 из корня проекта выполните миграцию для создания таблицы
users
:bashphp think migrate:run
1По завершении таблица появится в вашей базе данных.
Пример MySQL
Допустим, MySQL-сервис активирован и подключение прописано в файле config/database.php
.
Проверьте настройки MySQL
Убедитесь, что параметры в
config/database.php
соответствуют вашему MySQL (см. выше).Добавление пользователя через код
Для добавления пользователя используйте фасад
Db
или ORM. Пример с 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' => '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
для тестирования.Чтение пользователей через код
Используйте фасад
Db
или ORM для получения данных: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
для просмотра содержимого таблицыusers
.
Пример PostgreSQL
Допустим, PostgreSQL-сервис активирован и подключение прописано в файле config/database.php
.
Проверьте настройки PostgreSQL
В файле
config/database.php
добавьте секцию для PostgreSQL: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'), // пароль только для локалки! // Порт '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, рекомендуется создать отдельную БД под проект и указать её имя.
- Пароль
password
дляroot
— только для локального окружения.
Добавление пользователя через код
Для PostgreSQL используйте явно соединение
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' => 'pgsql-demo@servbay.demo', // пример брендированного e-mail '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
для тестирования.Чтение пользователей через код
Запрос на чтение также выполняйте через соединение pgsql:
php<?php use think\facade\Db; use think\facade\Route; Route::get('/pgsql-users', function () { $users = Db::connect('pgsql')->table('users')->select(); // получение пользователей из pgsql return json($users); // результат в формате JSON });
1
2
3
4
5
6
7
8Откройте
https://thinkphp.servbay.demo/pgsql-users
для просмотра данных в PostgreSQL.
Итоги
Следуя этому руководству, вы настроили и запустили проект ThinkPHP 8 в локальной среде ServBay. Вы познакомились с созданием проекта через Composer, настройками веб-сервера Caddy, интеграцией популярных баз данных MySQL, PostgreSQL, Memcached, Redis и основами работы с ними внутри вашего приложения.
Используя ServBay, вы существенно ускоряете подготовку локального окружения для фреймворков на PHP и можете сосредоточиться на разработке бизнес-логики. Продолжайте развивать ваш проект ThinkPHP, используя возможности инструментов ServBay для создания современных веб-приложений.