1

В входе моего приложения У меня есть следующие данные: airplane_id, airport_id и пассажира (ов) детали.Validation слой взаимодействия PHP и БД

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

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

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

+0

Сомневаюсь, что это нарушит что-либо важное. Не сильно отличается от проверки, чтобы увидеть, уникально ли имя пользователя перед созданием нового пользователя. Возможно, посмотрите, как компонент проверки подлинности Symfony организует вещи: https://symfony.com/doc/master/book/validation.html – Cerad

+0

@Cerad Вы знаете, как организовать проверку в моем случае с помощью Symfony Validator? – user1016265

+0

Начните с работы с документацией: https://github.com/symfony/Validator – Cerad

ответ

0

Да, эти проверки являются валидацией.

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

+0

Вы говорите, что этот случай, когда модель запроса валидатора не является нарушением? Я думаю, что когда модель проверяет это сам, это уже нарушение :), но я понял вашу точку зрения, тх. – user1016265

1

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

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

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

См. Также: https://lastzero.net/2015/11/form-validation-vs-model-validation/

+0

Спасибо, чувак. Это то, что я точно сделал несколько месяцев назад. – user1016265