Установка и первый запуск
Slim устанавливается как обычный пакет Composer в пустую папку. У него нет установщика и команды создания проекта: папку и первый файл вы создаёте сами.
Что нужно заранее
- PHP 8.1 или новее — проверка:
php -v; - Composer — проверка:
composer -V.
Установка
Создайте папку проекта и установите два пакета:
mkdir blog
cd blog
composer require slim/slim:"4.*" slim/psr7slim/slim — сам фреймворк. slim/psr7 — объекты запроса и ответа, без них Slim не запустится. После команды в папке blog появятся:
| Файл или папка | Что это |
|---|---|
composer.json | Список пакетов проекта |
composer.lock | Точные установленные версии |
vendor/ | Код пакетов; руками его не правят |
Первый файл
Создайте вручную папку public, а в ней файл index.php:
<?php
// public/index.php
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Slim\Factory\AppFactory;
require __DIR__ . '/../vendor/autoload.php';
$app = AppFactory::create();
$app->get('/', function (Request $request, Response $response) {
$response->getBody()->write('Привет, Slim!');
return $response;
});
$app->run();Что здесь происходит:
requireподключает автозагрузчик Composer — после этого классы пакетов доступны.AppFactory::create()создаёт объект приложения.$app->get('/', ...)объявляет маршрут: на запрос адреса/выполнить эту функцию.- Функция записывает текст в тело ответа и возвращает ответ.
$app->run()обрабатывает текущий запрос и отправляет ответ браузеру.
В следующих примерах строка <?php опускается, но в настоящем файле PHP она всегда стоит первой.
Запуск
У PHP есть встроенный веб-сервер для разработки. Запустите его из папки blog:
php -S localhost:8080 -t publicОткройте http://localhost:8080 — на странице появится «Привет, Slim!». Ключ -t public делает папку public корнем сайта. Сервер работает, пока открыто окно терминала; остановить его можно сочетанием Ctrl+C.
Вторая страница
Добавьте ещё один маршрут перед строкой $app->run();:
// public/index.php
$app->get('/about', function (Request $request, Response $response) {
$response->getBody()->write('О блоге');
return $response;
});Перезапускать сервер не нужно: обновите страницу http://localhost:8080/about — там будет «О блоге».
Частая ошибка
Обработчик обязан вернуть объект ответа. Если забыть return $response, вместо страницы появится ошибка типа. И выводить текст через echo нельзя: он уйдёт мимо объекта ответа. Всё, что должно попасть на страницу, записывают через $response->getBody()->write().