Создание и запуск проекта на 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 входит в состав ServBay: 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
Чтобы открыть проект на Slim в браузере, создайте Сайт (в ранних версиях — "Хост") в 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 автоматически обновит конфигурацию веб-сервера и применит изменения.
Подробнее о настройке сайтов смотрите в добавлении первого сайта.
Просмотр вашего сайта на Slim
После настройки откройте в браузере ваш домен https://servbay-slim-test.local
.
Если вы всё сделали правильно, на странице отобразится текст Hello ServBay!
, что значит проект Slim успешно работает через веб-сервер ServBay.
Примеры интеграции баз данных
Сам фреймворк Slim не содержит абстракций для работы с базой данных, но к нему легко подключаются любые PHP-библиотеки. В качестве примера рассмотрим интеграцию Eloquent ORM от Laravel (illuminate/database
) для MySQL и PostgreSQL, а также пример взаимодействия с Memcached и Redis.
Предварительная настройка: создание базы данных и миграция
Перед интеграцией базы данных создайте нужную БД в ServBay и таблицы для вашего приложения.
- Создание базы данных:
- В интерфейсе ServBay откройте соответствующий пакет — MySQL или PostgreSQL.
- Через phpMyAdmin (для MySQL/MariaDB), pgAdmin (для PostgreSQL) или консольный клиент создайте базу, например
servbay_slim_app
. - Обычно пароль пользователя root —
password
, его можно посмотреть или изменить в настройках ServBay.
- Установка и настройка Phinx (инструмент миграций): Phinx — популярный инструмент миграций для таблиц PHP-приложений.
- В корне вашего проекта выполните команду 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
- В корне вашего проекта выполните команду Composer:
- Создайте миграцию: Сгенерируйте новый файл миграции командой:bashВ каталоге
vendor/bin/phinx create CreateUsersTable
1db/migrations
появится PHP-файл миграции. Откройте его и опишите структуру таблицы в методеchange()
: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 - Запустите миграцию: В каталоге проекта выполните команду Phinx для создания таблицы
users
.bashВнимание: Перед запуском кода для работы с базой обязательно создайте базу данных и примените миграции.vendor/bin/phinx migrate
1
Использование компонента illuminate/database
Подключим Eloquent ORM (компонент Laravel) как полноценный ORM и Query Builder.
Установка 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';
и перед$app = AppFactory::create();
добавьте код: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', ]); // Делаем доступ по всему приложению $capsule->setAsGlobal(); // Активируем Eloquent $capsule->bootEloquent(); // ... дальнейшее создание экземпляра Slim ($app = 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', // time() для уникальности 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()); // ответ в формате JSON
$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
добавляется новый пользователь в таблицуusers
. - По адресу
https://servbay-slim-test.local/mysql-get-users
выводится весь список пользователей в формате JSON.
Пример работы с PostgreSQL
Предполагается, что в ServBay запущен пакет PostgreSQL, создана база servbay_slim_app
и проведена миграция для таблицы users
(в файле конфигурации укажите adapter: pgsql
и порт 5432
).
Обновите конфигурацию подключения в public/index.php
, сменив 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
добавьте перед $app->run();
:
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', // time() для уникальности 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 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
36
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
Доступ:
- По адресу
https://servbay-slim-test.local/pgsql-add-user
добавляется пользователь в таблицу PostgreSQLusers
. - По адресу
https://servbay-slim-test.local/pgsql-get-users
выводятся все пользователи в формате JSON.
Пример работы с Memcached
ServBay содержит пакет Memcached и расширение PHP ext-memcached
. Для взаимодействия нужен только клиентская библиотека, например, memcached/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
: Добавьте перед$app->run();
:php// ... инициализация и маршруты с базой ... // Маршрут работы с Memcached $app->get('/memcached-example', function (Request $request, Response $response, $args) { // Создаем экземпляр клиента Memcached $memcached = new Memcached(); // Добавляем сервер 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) { // Если данных нет — генерируем и записываем в Memcached $cachedData = 'Hello Memcached from ServBay! This was not cached.'; // Сохраняем значение в кэше, ttl — 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
: Добавьте перед$app->run();
:php// ... инициализация и маршруты с базой ... // ... маршрут Memcached (при необходимости) ... use Predis\Client as RedisClient; // Импортируем Predis // Маршрут работы с Redis $app->get('/redis-example', function (Request $request, Response $response, $args) { try { // Создаем клиент Redis (по умолчанию ServBay — 127.0.0.1:6379) $redis = new RedisClient([ 'scheme' => 'tcp', 'host' => '127.0.0.1', 'port' => 6379, ]); $cacheKey = 'my_servbay_redis_cache_key'; // Пробуем извлечь значение из Redis $cachedData = $redis->get($cacheKey); if ($cachedData === null) { // Если данных нет — сокращаем, сохраняем в Redis с TTL 60 сек $cachedData = 'Hello Redis from ServBay! This was not cached.'; $redis->setex($cacheKey, 60, $cachedData); // SETEX key seconds value $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
39
Доступ: Перейдите на https://servbay-slim-test.local/redis-example
. На первой загрузке откроется "This was not cached.", далее (до истечения TTL) — "This was served from cache."
Итоги
Выполнив описанные шаги, вы успешно создали и запустили проект на Slim Framework в локальной среде ServBay, настроили его с помощью функции Сайт и получили доступ через браузер. Также вы научились интегрировать в Slim-приложение разнообразные пакеты ServBay (MySQL, PostgreSQL, Memcached, Redis) и работать с ними через PHP-расширения и клиентские библиотеки. ServBay значительно упрощает процесс настройки и поддержки локальной среды, позволяя полностью сосредоточиться на разработке вашего приложения на Slim.