За последние 24 часа нас посетили 20147 программистов и 1080 роботов. Сейчас ищут 777 программистов ...

разложить $_POST и передать как аргумент?

Тема в разделе "Прочие вопросы по PHP", создана пользователем Konstant1n, 11 дек 2018.

  1. Konstant1n

    Konstant1n Активный пользователь

    С нами с:
    14 авг 2017
    Сообщения:
    273
    Симпатии:
    1
    Адрес:
    Волгоград
    Всем привет!
    Думаю многие сталкивались с этим вопросом. Давайте обсудим и придем к одному решению - будет правило для всех и больше не будем тормозить из-за этого.

    Нужен ответ на вопрос:
    передать методу модели данные $_POST как аргументы или обрабатывать напрямую эти данные?

    Пояснение.
    Сайт на PHP MVC. Заполняю на странице форму, нажимаю сохранить. Срабатывает ajax - обращается к методу контроллера, например, save(). В методе save() (метод контроллера) создается объект модели и вызывается метод save() модели. Так вот... вопрос: вызвать метод модели в контроллере так: save( $_POST['id'], $_POST['title'], ... ) или же save() и в этом методе (в модели) уже $id = $_POST['id'], $title = $_POST['title'], ...?

    И этот же вопрос по $_FILES (если загружаем больше одного файла)?
     
    #1 Konstant1n, 11 дек 2018
    Последнее редактирование: 11 дек 2018
  2. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.789
    Симпатии:
    646
    Тут нечего обсуждать. Никто в здравом уме не обрабатывает входные данные «напрямую» в модели.
    --- Добавлено ---
    P.S. Можно не отделять логику контроллера и модели, но это уже не MVC ;)
     
    SeApps и Konstant1n нравится это.
  3. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    В модель не должны попадать напрямую аргументы GET и POST
     
    webtask и SeApps нравится это.
  4. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Кто вам сказал, что у всех с этим проблемы и все тормозят из-за этого? Не выдавайте свои затыки за чужие, как бы делая одолжение. Есть затык или непонимание? Дело житейское, ничего зазорного тут нет. Все решаемо.

    А единое решение тут невозможно. Во-первых, каждый грохочет как хочет, во-вторых, зависит от ситуации, в третьих, входящие запросы желательно как минимум фильтровать. В-четвертых, нужна валидация. Как она реализована в конкретном решении/пакете - зависит лишь от воли автора решения или пакета.

    Если резюмировать - исходите из ситуации, не усложняйте простое, думайте головой, исходите из рациональности решения, фильтруйте инпут.
     
  5. ElisDN

    ElisDN Активный пользователь

    С нами с:
    13 фев 2018
    Сообщения:
    605
    Симпатии:
    130
    Всегда всё явно передавать снаружи внутрь через аргументы, а не дёргать изнутри через глобальный доступ (tell, dont ask). Это удобнее, так как:

    - Легко тестировать метод
    - Сразу видно, что ему нужно
    - Можно будет вызывать метод и в консоли, где нет $_POST
     
    SeApps нравится это.
  6. SeApps

    SeApps Новичок

    С нами с:
    3 апр 2018
    Сообщения:
    27
    Симпатии:
    1
    Как я делаю(и считаю, что правильно):
    В контроллере создается объект сущности.
    Метод save() либо вызывается на объекте, либо принимает только этот объект, и ему пофиг, откуда он взялся.
    Пример:
    PHP:
    1. $user = new User();
    2. $user -> id = $_POST['id'];
    3. $user -> login = $_POST['login'];
    4. // если в классе user есть метод save
    5. $user -> save();
    6. // если нету
    7. save($user);
    8.  
    9. // хотя конечно лучше чтоб был)
    По вопросу - лучше конечно передавать как аргументы.

    Про валидацию - фигня вопрос, делайте например так:
    PHP:
    1. $val = new Validator();
    2. $user -> login = $val -> validate($_POST['login']);
    А потом уж в классе валидатора пропишете все необходимые преобразования.
     
    #6 SeApps, 9 янв 2019
    Последнее редактирование: 9 янв 2019