@Dreaded

Может ли модель работать с массивом _POST и записывать данные в сессию?

В модели пользователя я описываю метод регистрации. Могу ли я из этого метода напрямую взаимодействовать с массивом $_POST`, и при удачной регистрации записать данные в сессию?

Или же мне нужно в контроллере передать в метод регистрации данные формы , и получив результат выполнения регистрации записать данные в сессию?

И еще вопрос: кто должен заниматься валидацией данных - модель или контроллер? Я сделал валидацию данных в сеттерах модели, т.е. перед тем как записать какое то свойство пользователя, будь то имя или email, в соответствующем сеттере данные сначала проходят проверку. Это приемлемо?
  • Вопрос задан
  • 252 просмотра
Решения вопроса 1
Maksclub
@Maksclub Куратор тега PHP
maksfedorov.ru
  • в модель должны попадать чистые данные (то есть таки да - -в контроллере)
  • вообще с голым _POST не нужно в 2018 году работать, посмотрите это видео: https://vk.cc/8dAijK
  • валидацией может заниматься модель, но в данном случае МОДЕЛЬ ВАЛИДАЦИИ, а не модель сущности,
    модель -- это целый слой, а не конкретный класс или вид классов, это и сущности и сервисы и валидация и т.д....

POST в моделе
Не правильно работать с _POST в моделе, тк модель -- по сути синоним вашего бизнеса, бизнес модель, мне кажется странным было бы, если в магазине были бы продавцы, товары, операции дать денег и взять сдачу, данные (купюра, скидка)
и тут же некий _POST запрос (ну или некая звуковая информация для операций (с битрейтом и частотой:):) мне кажется в бизнес-процесс должно попадать число или купюра, которое обработает некий контроллер (глаз, ухо и продавец в целом как валидатор)

Валидация в сеттере
По поводу сеттеров и валидации -- тоже плохо
Купюра должны быть проверена в момент ее передачи, а не когда вы уже дали товар, посчитали сдачу, напечатали чек).. аналогия может быть немного не точной, но понятен принцип -- не в сеттере :)

Ну или как пример -- договор между юрлицами, когда вы договорились и заполняете договор, для подписей (по сути сеттер ваш абстрактный) вы УЖЕ ДОЛЖНЫ были проверить контрагента и условия этого самого договора

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

Если каждый раз писать валидацию, то нужно каждый раз ее писать :)
Если вынести это в отдельную прослойку, то за валидацию будет отвечать отдельный слой, которому вы просто скармливаете поля и их правила -- это упрощает работу с задачей "валидировать" -- вы можете этот слой чинить и усложнять, а сеттеры будут чистыми и не будет копипаста со всеми проблемами -- дублирваоние (забыл, не углядел и прчоее)

Смотрите как валидация делается в Ларавел:
public function rules()
    {
        return [
            'name' => 'required|string|max:255',
            'email' => 'required|string|email|max:255|unique:users',
            'password' => 'required|string|min:6|confirmed',
        ];
    }
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Yan-s
Модель не должна зависеть от способов ввода/вывода. Она не должна знать ничего о способе предоставления (веб, декстоп, ...) приложения в котором она работает. Сейчас вы хотите, чтобы она обрабатывала HTTP запрос, а завтра вам понадобится предоставить возможность запускать эту же логику командой из консоли, например.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы