Оглавление
Slim
Микрофреймворк для API и небольших сайтов: маршруты, посредники и ничего лишнего.
1.Начало работы
- Знакомство со SlimЧто такое микрофреймворк, что входит в Slim 4, чего в нём нет и какое приложение будет собрано в этом курсе.
- Установка и первый запускКак установить Slim 4 через Composer, создать файл public/index.php и запустить приложение на встроенном сервере PHP.
- Папка public и веб-серверПочему все запросы приходят в public/index.php, зачем нужна папка public и как настроить Apache и Nginx для Slim.
- МаршрутыКак в Slim связать адрес и метод HTTP с кодом: методы, параметры в адресе, необязательные части и ограничения.
- Имена маршрутов и группыКак дать маршруту имя, построить ссылку методом urlFor и объединить маршруты с общим началом адреса в группу.
- ЗапросОбъект запроса PSR-7 в Slim: параметры адреса, данные формы и JSON, заголовки, метод и атрибуты.
- ОтветОбъект ответа PSR-7 в Slim: тело, код состояния, заголовки, ответ в формате JSON и перенаправление.
2.Структура приложения
- Структура проектаКак разложить приложение Slim по папкам: config, src, public, автозагрузка классов, файл сборки и файл маршрутов.
- Классы-действияКак вынести обработчики маршрутов Slim из функций в отдельные классы с методом __invoke и подключить их в файле маршрутов.
- Контейнер зависимостейЧто такое контейнер зависимостей, как подключить PHP-DI к Slim, как работает автосвязывание и когда нужны описания в config/container.php.
- Настройки и окружениеГде хранить настройки приложения Slim: файл .env, пакет phpdotenv, массив в config/settings.php и доступ к нему через контейнер.
- ПосредникиЧто такое посредник (middleware) в Slim, как написать свой класс-посредник, подключить его ко всем или к отдельным маршрутам и в каком порядке они выполняются.
- Встроенные посредникиТри посредника, которые есть в самом Slim: разбор тела запроса, маршрутизация и обработка ошибок — и правильный порядок их подключения.
3.Сайт с базой данных
- Шаблоны TwigКак подключить шаблонизатор Twig к Slim через пакет slim/twig-view, создать шаблон в папке templates и вывести его из действия.
- Макет и ссылки в шаблонахКак вынести общую разметку страниц в макет Twig, наследовать его, строить ссылки функцией url_for и передавать общие данные во все шаблоны.
- Подключение к базе данныхКак подключить базу данных MySQL к приложению Slim: таблица статей, параметры в .env и объект PDO в контейнере.
- Класс-репозиторийКак собрать запросы к таблице статей в класс-репозиторий с подготовленными запросами PDO и использовать его в действиях Slim.
- Формы и проверка данныхКак в Slim показать форму, принять её данные в действии, проверить их своим классом и вывести ошибки рядом с полями.
- Сессии и разовые сообщенияКак запустить сессию PHP в Slim посредником, хранить в ней данные между запросами и показывать разовые сообщения после перенаправления.
- Вход пользователейКак сделать вход по почте и паролю в Slim: таблица пользователей, проверка пароля, запись в сессию и посредник, закрывающий маршруты от гостей.
- Защита от CSRFЧто такое подделка запросов CSRF и как защитить формы приложения Slim пакетом slim/csrf: посредник Guard и скрытые поля с токеном.
- Загрузка файловКак принять файл из формы в Slim: объект загруженного файла PSR-7, проверка ошибки, размера и расширения и сохранение в папку public/uploads.
4.API и запуск
- Обработка ошибокКак Slim превращает исключения в ответы: исключения HTTP с кодами 404 и 403 и своя страница ошибки через setDefaultErrorHandler.
- ЖурналКак подключить журнал Monolog к Slim: описание в контейнере, запись ошибок посредником ошибок и свои сообщения из действий.
- REST APIКак сделать в Slim API для статей: группа маршрутов ресурса, действия с ответами JSON и правильные коды состояния.
- Доступ к API по токенуКак закрыть изменяющие маршруты API в Slim: таблица токенов, посредник, проверяющий заголовок Authorization, и краткий обзор JWT.
- CORSПочему браузер блокирует запросы к API с другого сайта и как разрешить их в Slim посредником с заголовками CORS и маршрутом для OPTIONS.
- ТестыКак тестировать приложение Slim с PHPUnit: запрос создаётся в коде, проходит через метод handle, а база подменяется в контейнере.
- Размещение на сервереКак выложить приложение Slim на рабочий сервер: установка зависимостей, файл .env, права на папки, кеш шаблонов и маршрутов, порядок обновления.