Создание блога с базой данных на Elang
Стартовый проект блога объединяет аутентификацию, публикацию после подтверждения адреса, модель Post, постраничную навигацию, проверки принадлежности и экранированный HTML, формируемый сервером. Это полноценный работающий пример, а не набор разрозненных фрагментов.
Создание проекта
elang new journal --starter=blog
cd journal
php elang serve
Composer устанавливает зависимости, создаёт ключ приложения, применяет миграции аутентификации и публикаций и запускает doctor. Откройте локальный URL, показанный сервером.
Создание и подтверждение учётной записи
Зарегистрируйтесь на /register. В локальном режиме откройте /_elang/studio/mail и воспользуйтесь ссылкой подтверждения. Почтовый ящик хранит зашифрованные локальные сообщения и доступен только с loopback-адреса в локальном окружении.
После подтверждения откройте /posts/new. Напишите заголовок и текст статьи. Сначала сохраните черновик, затем выберите «Опубликовать», когда захотите сделать статью общедоступной.
Знакомство с файлами
Post объявляет таблицу, разрешённые для записи поля и преобразования типов. BlogController проверяет ввод, устанавливает author_id из текущего пользователя и ограничивает обновление и удаление тем же идентификатором. Миграция публикаций создаёт схему и внешний ключ автора. Представление Twig экранирует текст статьи, а не рассматривает его как произвольный HTML.
Публичные читатели видят только опубликованные статьи. Вторая учётная запись не может изменить или удалить статью первой. Знание числового ID не является авторизацией.
Проверка результата
Создайте статью, измените её, опубликуйте и откройте её публичный URL. Создайте вторую учётную запись и убедитесь, что URL редактирования первой статьи возвращает 404. Добавьте несколько статей, чтобы увидеть постраничную навигацию. Изучите Studio, чтобы понять запросы, стоящие за страницей.
Перед развёртыванием настройте HTTPS, реальный почтовый транспорт, учётные данные базы данных и параметры рабочей среды. Изучите руководства по развёртыванию и аутентификации, чтобы понять границы, которые должно сохранять публичное приложение.