Уровень проверки взаимодействия PHP и БД

На входе моей заявки у меня есть следующие данные: airplane_id, airport_id а также Пассажир (ы) подробности.

Мне нужно убедиться, что выбрано airplane_id мог достичь airport_id. Это может быть сделано только с помощью SQL-запроса, но эта проверка все еще является процессом проверки, не так ли?

Проверка должна произойти до того, как я сохраню данные пассажира (ов).

В моей модели приложения это объект шаблона ActiveRecord, который представляет таблицу. Я бы предпочел сделать Validator отдельным слоем, чем встроить его в модель слой. Но в этом случае у меня возникает дополнительная проблема: обычно валидаторы являются общими (их правила могут применяться к любому набору данных). Например, это электронное письмо с данными? или IP? или свидание? и т.д …. но не берите в голову то, что данные.
В моем случае упомянутое правило не будет распространено вообще; это определенно будет конкретное правило, которое не может использоваться никакими другими входными данными. Итак, мой вопрос: эта проверка все еще является частью процесса проверки?
И если да, будет ли Валидатор нарушать S принцип из набора SOLID?

1

Решение

Это проверка, и вы должны использовать отдельный уровень проверки (единственная ответственность за проверку входных данных). Проверка входных данных — это не просто проверка типов данных, она может быть гораздо более сложной. Проверка модели все еще может быть необходима, хотя.

Подумайте о проверке входных данных как о проверке белого списка («принять заведомо хорошее»), а о проверке модели как о проверке черного списка («отклоните заведомо плохое»). Проверка белого списка более безопасна, в то время как проверка черного списка предотвращает чрезмерное ограничение уровня вашей модели для очень специфических вариантов использования.

Неправильные данные модели всегда должны вызывать исключение (в противном случае приложение может продолжить работу, не замечая ошибки), в то время как неверные входные значения, поступающие из внешних источников, не являются неожиданными, а скорее распространены (если у вас нет пользователей, которые никогда не делают ошибок).

Смотрите также: https://lastzero.net/2015/11/form-validation-vs-model-validation/

1

Другие решения

Да, эти проверки являются проверочными.

Исходя из опыта работы с шаблонной структурой MVC (Yii / 2), я бы сказал, что вы можете создать абстрактный класс валидатора, а затем расширить его на ваши конкретные валидаторы и вызывать эти валидаторы из класса модели. Это понадобится Model->validate() вызов, но наличие отдельных классов, которые фактически проверяют данные, не нарушит S в SOLID, в то время как Model->validate() будет просто перебирать методы validatos validate и сохранять сообщения об ошибках в массиве.

0

По вопросам рекламы [email protected]