Создание и запуск проекта Slim в ServBay
В этом материале вы узнаете, как быстро создать, настроить и запустить PHP-проект на базе Slim Framework в мощной локальной среде для web-разработки ServBay. Решение ServBay предоставляет интегрированные пакеты PHP, web-серверов (Caddy/Nginx/Apache) и различных систем баз данных, что делает его отличной платформой для разработки на Slim Framework.
Что такое Slim?
Slim — это легковесный PHP-микрофреймворк, созданный для быстрого создания простых и одновременно функциональных web-приложений и API. В его основе лежит маршрутизация, обработка запросов и формирование ответов, что особенно удобно для проектов, которым нужен быстрый старт и публикация, а также в роли фундамента для более сложных приложений.
Ключевые особенности и преимущества Slim
- Легковесность: Основная библиотека Slim весьма компактна, потребляет минимум ресурсов и быстро запускается — идеальный выбор для малых и средних приложений или микросервисов.
- Гибкость: Фреймворк разработан по принципу расширяемости, легко интегрируется с любыми сторонними библиотеками (например, шаблонизаторами, ORM, модулями аутентификации), что позволяет подбирать инструменты под конкретные задачи проекта.
- Простота использования: Благодаря лаконичному API и понятной документации разработчики быстро осваивают основные принципы работы и начинают создавать приложения.
- Мощная маршрутизация: Поддерживает разные HTTP-методы (GET, POST, PUT, DELETE и др.) и сложную настройку маршрутов, в том числе их группировку, использование middlewares и параметров в пути.
- Поддержка middleware: Middleware-уровень позволяет внедрять обработку до или после выполнения основной логики приложения, например, аутентификацию, логирование, CORS и другие задачи.
Фреймворк Slim идеально подходит для построения RESTful API, быстрого прототипирования и разработки изолированных фич или сервисов.
Создание и запуск Slim-проекта в ServBay
В этом руководстве используется предустановленная PHP-среда и функционал сайтов в ServBay для настройки web-сервера и быстрого доступа к вашему проекту на Slim Framework.
Необходимые условия
Перед началом работы убедитесь, что выполнили следующие шаги:
- Установили и запустили ServBay: Приложение должно быть установлено на вашем macOS и находиться в рабочем состоянии.
- Composer уже предустановлен: В ServBay Composer интегрирован по умолчанию — отдельная установка не нужна.
Создание Slim-проекта
Чтобы обеспечить простое управление и настройку проектов ServBay, рекомендуется размещать сайты в /Applications/ServBay/www
.
- Перейдите в корневую директорию сайтов ServBay:bash
cd /Applications/ServBay/www
1 - Создайте папку для проекта: Организуйте отдельный каталог для вашего приложения на Slim.bash
mkdir servbay-slim-app
1 - Войдите в каталог проекта:bash
cd servbay-slim-app
1 - Установите Slim через Composer: Выполните инсталляцию фреймворка и реализации PSR-7 в каталоге проекта.bashЭта команда скачает Slim и библиотеку
composer require slim/slim "^4.0" slim/psr7 -W
1slim/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-запрос по корневому адресу (<?php // Подключаем autoload 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
внутри вашего проекта:/Applications/ServBay/www/servbay-slim-app/public
. Это важно, поскольку файлindex.php
(точка входа Slim) находится именно там — сервер должен перенаправлять запросы в эту папку.
- Имя (Name):
- Сохраните параметры. ServBay автоматически применит и обновит настройки web-сервера.
Подробное описание шагов настройки сайта в ServBay смотрите в разделе Добавление первого сайта.
Доступ к вашему сайту на Slim
После настройки откройте браузер и перейдите по адресу вашего сайта: https://servbay-slim-test.local
.
Если всё верно, вы увидите на странице сообщение Hello ServBay!
, что подтверждает успешный запуск Slim-приложения через web-сервер ServBay.
Примеры интеграции баз данных
В самом Slim отдельного слоя работы с базой данных нет, но он легко расширяется нужными PHP-библиотеками. В качестве примера ниже показано, как подключить ORM Eloquent из Laravel (illuminate/database
) для работы с MySQL и PostgreSQL, а также использовать Memcached и Redis.
Предварительная подготовка: база данных и миграции
Перед началом интеграции убедитесь, что создали нужную базу данных в ServBay и подготовили структуру таблиц в проекте.
- Создайте базу данных:
- Откройте приложение ServBay, найдите раздел используемого вами пакета базы данных (например, MySQL или PostgreSQL).
- Через инструменты управления (phpMyAdmin для MySQL/MariaDB, pgAdmin для PostgreSQL) или клиент командной строки создайте новую БД, например, с именем
servbay_slim_app
. - По умолчанию у root-пользователя — пароль
password
; его можно посмотреть или изменить в интерфейсе ServBay.
- Установите и настройте Phinx (инструмент миграций): Phinx широко используется для версионирования структуры БД.
- В корне проекта
/Applications/ServBay/www/servbay-slim-app
выполните установку через Composer:bashcomposer require robmorgan/phinx
1 - Инициализируйте конфиг для 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
- В корне проекта
- Создайте миграцию: Выполните команду для создания файла миграции:bashФайл появится в
vendor/bin/phinx create CreateUsersTable
1db/migrations
. Отредактируйте методchange()
для описания структуры таблицыusers
: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 - Выполните миграцию: В корне проекта запустите применение миграций:bashВажно: Прежде чем запускать примеры кода работы с БД, завершите этапы по созданию базы и её миграции.
vendor/bin/phinx migrate
1
Использование компонента illuminate/database
Для организации ORM/Query Builder воспользуемся компонентом illuminate/database
(как в Laravel).
Установите illuminate/database: В корне вашего проекта выполните:
bashcomposer require illuminate/database
1Инициализация соединения с БД в
public/index.php
: Сразу после строкиrequire __DIR__ . '/../vendor/autoload.php';
и до создания Slim-приложения$app = AppFactory::create();
добавьте и настройте соединение следующим образом:php// ... Другие require и use ... use Illuminate\Database\Capsule\Manager as Capsule; // Импорт менеджера Capsule // Инициализация Eloquent ORM $capsule = new Capsule; // Конфигурация подключения к БД (укажите нужный драйвер и параметры) $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();
добавьте следующие маршруты:
// ... Предыдущая инициализация и маршрут '/'
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', // Гарантия уникального 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'); // Задаём Content-Type
} catch (\Exception $e) {
$response->getBody()->write('Error fetching users: ' . $e->getMessage());
$response = $response->withStatus(500);
}
return $response;
});
// ... $app->run();
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
При использовании PostgreSQL (пакет запущен, база servbay_slim_app
создана, миграции выполнены; убедитесь в правильном adapter=pgsql
и port=5432
в конфиге Phinx):
Измените настройки подключения — используйте драйвер pgsql
и schema:
$capsule->addConnection([
'driver' => 'pgsql', // Измените на pgsql
'host' => '127.0.0.1',
'database' => 'servbay_slim_app',
'username' => 'root',
'password' => 'password',
'charset' => 'utf8', // Для PostgreSQL обычно utf8
'prefix' => '',
'schema' => 'public', // Для PostgreSQL необходимо указать схему
]);
// ... Остальная инициализация Eloquent без изменений ...
2
3
4
5
6
7
8
9
10
11
В public/index.php
перед $app->run();
добавьте также:
// ... Предыдущая инициализация и маршрут '/'
// ... MySQL-маршруты, если нужны ...
use Illuminate\Database\Capsule\Manager as Capsule; // Убедитесь, что импортировали
// Добавление пользователя в PostgreSQL
$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', // Для уникальности
'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;
});
// Получение пользователей из PostgreSQL
$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();
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
— добавит пользователя в таблицу PostgreSQL. - Перейдите на
https://servbay-slim-test.local/pgsql-get-users
— получите всех пользователей через PostgreSQL в формате JSON.
Пример с Memcached
ServBay содержит пакет Memcached и расширение PHP ext-memcached
. Нужно только добавить клиентскую библиотеку для PHP — например, memcached/memcached
.
Установите клиент Memcached: В директории проекта выполните:
bashcomposer require memcached/memcached
1Добавьте маршруты в
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) { // Если кэш пуст — сохраняем значение $cachedData = 'Hello Memcached from ServBay! This was not cached.'; // Добавляем в кэш на 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.", а последующие (пока кэш не истёк) — "This was served from cache.".
Пример с Redis
В комплекте с ServBay идут пакет Redis и PHP-расширение ext-redis
. Для работы — установите клиентскую библиотеку, например, predis/predis
.
Установите клиент Redis: В папке проекта выполните:
bashcomposer require predis/predis
1Добавьте маршруты в
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
Доступ: Перейдите на https://servbay-slim-test.local/redis-example
. Первый запрос выведет "This was not cached.", последующие до окончания TTL — "This was served from cache.".
Итоги
Следуя этим шагам, вы создадите полноценный проект на Slim Framework в локальной среде разработки ServBay, сможете развернуть сайт, протестировать его работоспособность и интегрировать с современными базами данных и системами кеширования (MySQL, PostgreSQL, Memcached, Redis). ServBay существенно упрощает настройку локального окружения, позволяя полностью сосредоточиться на разработке приложений на базе Slim.