@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 запрос, а завтра вам понадобится предоставить возможность запускать эту же логику командой из консоли, например.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Ведисофт Екатеринбург
от 25 000 ₽
YCLIENTS Москва
от 200 000 до 350 000 ₽
от 300 000 до 500 000 ₽
20 апр. 2024, в 13:56
7000 руб./за проект
20 апр. 2024, в 13:52
7000 руб./за проект
20 апр. 2024, в 13:23
1000 руб./за проект