«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Аноним 2019/01/21 12:15:54  №1331745 1
d5bbedb232.png (45, 1124x417)
417x1124
Возник вопрос по студентам. Каким образом лучше проверять переданные через форму данные?

Я вижу такой сценарий:

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

В правильном ли я направлении думаю?
Ответы: >>1331750 >>1331769
Аноним 2019/01/21 12:19:10  №1331750 2
>>1331745
>Перед тем как передать форму на сервер проверяем её жсом и если есть ошибки - выводим их
Правильно, первая линия обороны так сказать, фактически иллюзорная, но лучше пусть будет, чем нет.
>выводим их, если нет данные идут в контроллер, который создает модель с переданными значениями
И в том и другом случае ты валидируешь все от а до я, как минимум не менее тщательно, чем на фронте.
>Если значения неправильные, у сеттеров модели выбрасываются исключения, которые мы перехватываем в контроллере.
Это от твоих предпочтений зависит. Кто исключения кидает на такую мелочевку и ловит их потом по иерархии. А кто составляет стек ошибок. Результат один и тот же. Выводить не обязательно. Что с ними делать решать тебе и под конкретный этап разработки.
Ответы: >>1331765
Аноним 2019/01/21 12:45:31  №1331765 3
>>1331750
>И в том и другом случае ты валидируешь все от а до я, как минимум не менее тщательно, чем на фронте.

class Controller
{
// Получается где-то тут, перед передачей в модель нужно валидировать $name, $email?

try {
$model = new Model($name, $email);
} catch () {
// Что-то делаем
}
}
Ответы: >>1331771
Аноним 2019/01/21 12:50:49  №1331769 4
>>1331745

Стандартный вопрос: урок читал? Там есть алгоритм (хотя ты можешь сделать и свой): https://github.com/codedokode/pasta/blob/master/forms.md

> Перед тем как передать форму на сервер проверяем её жсом
Хватит HTML5 валидации.

> Если значения неправильные, у сеттеров модели выбрасываются исключения

Есть такой вариант, когда в модель встроена валидация, но он имеет недостатки. Что, если для проверки уникальности email надо обратиться к БД? Где ты возьмешь объект для работы с БД в модели?

Потому выгоднее может быть сделать отдельный сервис-валидатор и в нем метод валидации:

$studentValidator = new StudetnValidator(...);
$errors = $studentValidator->validate($model);

Использование исключений не позволяет передать несколько ошибок.
Ответы: >>1331785
Аноним 2019/01/21 12:52:10  №1331771 5
>>1331765
Контрллер валидирует только инупт, потом слой модели валидирует данные.
Например контроллер чекает что передано число больше 0, а модель уже валидирует на это число от 2 до 25. Конкретизируй отвественность, сначала контроллер, который ловит самые грубые ошибки, потом модель, которая ловит логические ошибки. Во всяком случае контроллер спокойно число от строки отделит, и многие другие вещи сделает без привязки к бизнес логике, а модель добьет остальное. (Модель в это случае не датакласс или активрекорд, не путай)
Ответы: >>1331785
Аноним 2019/01/21 13:14:14  №1331785 6