Всем привет! Думаю многие сталкивались с этим вопросом. Давайте обсудим и придем к одному решению - будет правило для всех и больше не будем тормозить из-за этого. Нужен ответ на вопрос: передать методу модели данные $_POST как аргументы или обрабатывать напрямую эти данные? Пояснение. Сайт на PHP MVC. Заполняю на странице форму, нажимаю сохранить. Срабатывает ajax - обращается к методу контроллера, например, save(). В методе save() (метод контроллера) создается объект модели и вызывается метод save() модели. Так вот... вопрос: вызвать метод модели в контроллере так: save( $_POST['id'], $_POST['title'], ... ) или же save() и в этом методе (в модели) уже $id = $_POST['id'], $title = $_POST['title'], ...? И этот же вопрос по $_FILES (если загружаем больше одного файла)?
Тут нечего обсуждать. Никто в здравом уме не обрабатывает входные данные «напрямую» в модели. --- Добавлено --- P.S. Можно не отделять логику контроллера и модели, но это уже не MVC
Кто вам сказал, что у всех с этим проблемы и все тормозят из-за этого? Не выдавайте свои затыки за чужие, как бы делая одолжение. Есть затык или непонимание? Дело житейское, ничего зазорного тут нет. Все решаемо. А единое решение тут невозможно. Во-первых, каждый грохочет как хочет, во-вторых, зависит от ситуации, в третьих, входящие запросы желательно как минимум фильтровать. В-четвертых, нужна валидация. Как она реализована в конкретном решении/пакете - зависит лишь от воли автора решения или пакета. Если резюмировать - исходите из ситуации, не усложняйте простое, думайте головой, исходите из рациональности решения, фильтруйте инпут.
Всегда всё явно передавать снаружи внутрь через аргументы, а не дёргать изнутри через глобальный доступ (tell, dont ask). Это удобнее, так как: - Легко тестировать метод - Сразу видно, что ему нужно - Можно будет вызывать метод и в консоли, где нет $_POST
Как я делаю(и считаю, что правильно): В контроллере создается объект сущности. Метод save() либо вызывается на объекте, либо принимает только этот объект, и ему пофиг, откуда он взялся. Пример: PHP: $user = new User(); $user -> id = $_POST['id']; $user -> login = $_POST['login']; // если в классе user есть метод save $user -> save(); // если нету save($user); // хотя конечно лучше чтоб был) По вопросу - лучше конечно передавать как аргументы. Про валидацию - фигня вопрос, делайте например так: PHP: $val = new Validator(); $user -> login = $val -> validate($_POST['login']); А потом уж в классе валидатора пропишете все необходимые преобразования.