Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Установка и первый запуск

Slim устанавливается как обычный пакет Composer в пустую папку. У него нет установщика и команды создания проекта: папку и первый файл вы создаёте сами.

Что нужно заранее

  • PHP 8.1 или новее — проверка: php -v;
  • Composer — проверка: composer -V.

Установка

Создайте папку проекта и установите два пакета:

mkdir blog
cd blog
composer require slim/slim:"4.*" slim/psr7

slim/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();

Что здесь происходит:

  1. require подключает автозагрузчик Composer — после этого классы пакетов доступны.
  2. AppFactory::create() создаёт объект приложения.
  3. $app->get('/', ...) объявляет маршрут: на запрос адреса / выполнить эту функцию.
  4. Функция записывает текст в тело ответа и возвращает ответ.
  5. $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().

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.