Разрабатывался на PHP 8.1, MySQL 8.0. Laravel 9.11, Vue 3.2, Vue Router 4, Pinia 2, Bootstrap 5.1
Необходимо написать небольшой сайт - статейник. Макет не принципиален. Можно взять bootstrap или любой другой фреймворк. Так же можно использовать любые JS фреймворки. Главное, чтобы на страницах присутствовали все компоненты.
Среднее время выполнения: 4 часа.
Можно не реализовывать хранение изображений. Для заглушек можно юзать сервис https://placeholder.com/ или подобный (чтобы не заморачиваться с нарезкой). Либо сделать 2 изображения (миниатюра и обычное) и переиспользовать их.
Всю логику реализуем встроенным функционалом Laravel.
Результат необходимо загрузить в публичный репозиторий GitHub.
- Главная страница Url: /
- Каталог статей Url: /articles
- Страница статьи Url: /articles/{slug}
Компоненты:
- Навигационное меню. Активный пункт "Главная страница".
- Последние добавленные статьи. 6 миниатюр статей в сортировке LIFO
Компоненты:
- Навигационное меню. Активный пункт "Каталог статей".
- Листинг статей. Сортировка LIFO. 10 миниатюр статей на страницу
- Пейджинация
Компоненты:
- Навигационное меню. Активный пункт "Каталог статей".
- Обложка статьи
- Текст статьи
- Теги статьи
- Счетчик лайков статьи
- Счетчик просмотров статьи
- Форма коментария
Необходимо сделать так, чтобы в блоке меню был помечен пункт раздела, в котором находится в текущий момент пользователь. Правила формирования подсветки выбранного раздела описаны в блоке Описание страниц
Стандартная пейджинация Laravel (https://laravel.com/docs/7.x/pagination#introduction)
Блок состоит из следующих элементов:
- миниатюра обложки статьи
- заголовок статьи
- краткое описание статьи - первые 100 симоволов от текста статьи
Ссылка. Состоит из url и label.
Элемент является кнопкой, на которой в качестве label написано число. При клике на кнопку отправляется AJAX запрос, инкрементирующий счетчик. В ответе на запрос возвращается новое значение, которое необходимо отобразить в label.
Текстовый элемент, отображающие текущий счетчик просмотров. Через 5 секунд после открытия статьи отправляется запрос, инкрементирующий счетчик. В ответе на запрос возвращается новое значение, которое необходимо отобразить в элементе.
Форма, состоящая из 2х полей:
- Тема сообщения
- Текст сообщения
При нажатии на кнопку "Отправить" отправляется AJAX запрос. При успешной обработке форма заменяется на плашку "Ваше сообщение успешно отправлено".
При реализации API методов учтите, что онлайн блога заранее не известен. Ваша реализация должна позволять избежать блокировок БД в случае огромного количества входящих запросов (допустим 1 млн входящих запрос на инкрементацию счетчика просмотров). Это требования необходимо вам для организации правильного хранения лайков и просмотров. Ответ: application/json
Ответ: новое значение счетчика
Ответ: новое значение счетчика
Вводные данные: Подразумеваем, что данный механизм очень медленный по какой то причине (100500 операций). Для того, чтобы не городить реально долго выполняющуюся логику, используйте для теста команду sleep(600), которая остановит исполнение кода на 10 минут.
Необходимо реализовать следующую механику:
- API метод получает запрос
- метод возращает ответ клиенту
- метод исполняет логику в фоновом режиме
Передаваемые поля:
- subject. Varchar(255).
- body. LongText
Ответы:
- ValidationException. Если не заполнено одно из полей.
- Success. Любой, главное чтобы с 200 кодом.
Развертывание должно производиться через стандартные механизмы:
- git clone ...
- php artisan migrate
- php artisan db:seed
- php artisan serve
То есть никакие импорты SQL файлов \ загрузка zip архивов - не приемлемы.
- ArticleSeed. Должен сгенерировать 20 статей с рандомной датой и рандомным текстом (длина текста от 200 символов). Используем Faker.
- ArticleTagSeed. Должен сгенерировать некоторое количество тегов, чтобы хотя бы 1 был в каждой статье.
- удаляем директорию vendor и node_modules (если требуется)
- удаляем все таблицы с тестовой БД (или пересоздаем БД)
- удаляем файл .env из корня проекта
- создаем файл .env на базе .env.example
- запускаем composer install
- запускаем npm install (если требуется)
- создаем ключ (php artisan key:generate)
- запускаем миграции (php artisan migrate)
- запускаем сиды (php artisan db:seed)
- запускаем локальный сервер (php artisan serve)
- проверяем весь написанный функционал. Все страницы должны содержать все элементы, описанные в блоке Описание страниц