41 lines
3.0 KiB
Markdown
41 lines
3.0 KiB
Markdown
# Описание задачи: Реализация списка задач с возможностью изменения статуса выполнения
|
||
|
||
## Цель
|
||
|
||
Создать веб-интерфейс для отображения списка задач с возможностью помечать задачи как выполненные или невыполненные. Изменения статуса задачи должны отправляться на сервер асинхронно (AJAX) и сохраняться в кеше.
|
||
|
||
## Основные требования
|
||
|
||
> К редактированию доступны только файлы `models/Task.php` и `views/task/index.php`.
|
||
|
||
- Задача содержит поля:
|
||
- `id` — уникальный идентификатор задачи.
|
||
- `order` — порядок сортировки.
|
||
- `title` — название задачи.
|
||
- `checked` — булево значение, указывающее, выполнена задача или нет.
|
||
- Изначальные данные хранятся в константе `INIT_DATA`.
|
||
- Данные загружаются и сохраняются в кеш приложения (`Yii::$app->cache`).
|
||
- Необходимо реализовать методы:
|
||
- `search($params)`
|
||
- `save()` — сохраняет текущий объект задачи в кеш.
|
||
- `findOne($id)` — возвращает задачу по идентификатору.
|
||
- Валидация поля `checked` как булевого значения.
|
||
- Определены метки атрибутов для отображения в интерфейсе.
|
||
|
||
## Представление (`index.php`)
|
||
|
||
- Отображает список задач в виде таблицы с помощью `GridView`.
|
||
- Колонки таблицы:
|
||
- `id` — идентификатор задачи.
|
||
- `title` — название задачи.
|
||
- `checked` — чекбокс, отражающий статус выполнения задачи.
|
||
- При изменении состояния чекбокса отправляется AJAX POST-запрос на `\app\controllers\TaskController::actionSetState`.
|
||
- В случае ошибки запроса состояние чекбокса восстанавливается.
|
||
|
||
## Технические детали
|
||
|
||
- Данные задач не хранятся в базе, а кэшируются в памяти приложения.
|
||
- Сортировка задач происходит по полю `order` в порядке возрастания.
|
||
- AJAX-запросы позволяют обновлять статус задачи без перезагрузки страницы.
|
||
- Валидация и сохранение данных реализованы в модели `Task`.
|
||
- Представление использует стандартные компоненты Yii2 (`GridView`, `ArrayDataProvider`). |