В КУРСЕ?

Разбираемся в теме

Учёт расходов в Laravel: модель данных, проверки и доступ к записям

Приложение учёта расходов кажется простой формой с суммой и категорией. На практике его надёжность зависит от правил данных: кому принадлежит запись, в какой валюте она сохранена и как строится итог за период. Laravel предоставляет инструменты для маршрутов, проверки ввода, работы с моделями и авторизации. Но сам фреймворк не выбирает правила предметной области. Их полезно описать до реализации интерфейса на небольшом наборе вымышленных операций.

Определять сущности и смысл полей

Минимальная запись расхода может содержать владельца, сумму, валюту, дату операции, категорию и необязательный комментарий. Дата создания записи не всегда совпадает с датой покупки, поэтому их нельзя автоматически смешивать. Категории могут принадлежать пользователю или быть общими: это решение влияет на права изменения. Для денежных значений выбирают представление, сохраняющее нужную точность, например целое количество минимальных денежных единиц либо подходящий десятичный тип. Обычная двоичная дробь может давать нежелательные округления. Валюты нельзя складывать в один итог без явного правила пересчёта и понятного происхождения курса.

Проверять ввод на сервере

Удобная форма может ограничивать ввод, но проверка в браузере не заменяет серверную. Нужно определить допустимый формат суммы, диапазон даты, длину комментария и существование категории. В Laravel правила можно организовать через механизмы валидации, а повторяющуюся логику вынести в отдельные классы запросов. Важно проверять не только вид значения, но и его смысл в текущем контексте. Категория может существовать в базе и всё равно быть недоступной этому пользователю. Сообщение об ошибке должно объяснять, какое поле требует исправления, не раскрывая чужие данные и внутренние детали приложения.

Разделять вход в систему и разрешение на действие

Аутентификация отвечает на вопрос, кто вошёл, а авторизация — что этому человеку разрешено. Наличие активной сессии не означает доступ ко всем расходам. Просмотр, изменение и удаление записи должны проверяться по её принадлежности и правилам приложения. В Laravel для такого решения предусмотрены политики и другие механизмы авторизации. Нельзя полагаться только на скрытую кнопку: запрос можно отправить независимо от интерфейса. В запросах к данным также важно ограничивать выборку нужным владельцем. Идентификатор записи в адресе не должен превращаться в способ просмотреть чужую финансовую историю.

Проверять отчёт на небольших примерах

Итог за месяц зависит от границ периода, выбранной даты и правил включения записей. Для проверки удобен маленький набор, который можно посчитать вручную. Полезно включить операции на границе месяца, несколько категорий и запись, которую позже исправили. Если приложение допускает несколько валют, отчёт должен показывать их раздельно либо явно применять согласованный пересчёт. Отдельно проверяют, что данные другого пользователя не влияют на результат. Тесты должны охватывать не только красивый экран, но и запрет недопустимого доступа. Резервное копирование и восстановление продумывают до хранения важных реальных данных, а не после первого сбоя.

Попробуйте на практике

Подготовьте спецификацию учебного приложения расходов без создания аккаунтов и передачи личных финансовых данных.

  1. Придумайте шесть расходов двух вымышленных пользователей, указав суммы, даты, валюты и категории.
  2. Опишите правила обязательных полей, точности суммы и допустимости выбора категории.
  3. Вручную посчитайте итог одного пользователя за выбранный период, отдельно обработав разные валюты.
  4. Составьте четыре проверки: корректное добавление, неверная сумма, попытка открыть чужую запись и операция на границе периода.

Как проверить результат. Для каждого теста известен ожидаемый результат. Чужие записи исключены, валюты не смешиваются без правила, а итог можно воспроизвести вручную.

Частые вопросы

Можно ли хранить сумму как произвольный текст?

Текст удобен для исходного ввода, но для расчётов нужно строгое проверенное представление. Иначе разные разделители, символы валют и форматирование будут создавать неоднозначность.

Достаточно ли фильтровать расходы в интерфейсе?

Нет. Ограничения доступа должны действовать на сервере. Пользователь не должен получать чужие данные даже при самостоятельной отправке запроса или изменении идентификатора в адресе.

Самостоятельный разбор темы. Содержание конкретной обучающей программы здесь не представлено.

Зарегистрируйтесь, чтобы уточнить возможность доступа к этому материалу

Зарегистрироваться
← К списку материалов