powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / MVC передача параметров в модели
5 сообщений из 5, страница 1 из 1
MVC передача параметров в модели
    #38199873
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В ходе рефакторинга кода и его оптимизации, столкнулся с некоторой "теоретической" проблемой, решил отписать тут, может кто знает подходящее решение:

Дано:
Организация кода согласно шаблону MVC (вариант пассивная модель). Более того, код сильно "унифицирован", а именно: все приходящие параметры запроса get, post, cookie и т.д. кодом диспетчера запроса формируются в единый массив $params для единообразной работы всех контроллеров.

Далее. Представление (форма отдаваемая в браузер) создается динамически с идентификацией элементов, получаемой из моделей бизнес-логики... что позволяет ожидать параметры запроса заведомо одинаково именованные с элементами в моделях БЛ (а зачастую и моделях БД).

Это унификация на практике позволяет принятый массив параметров передавать напрямую в методы классов моделей после прохождения валидации в контроллере, без каких либо переприсваиваний и перетасовок в циклах из массива в массив. Каждый такой метод моделей, принимая обобщенный массив параметров использует только те, которые ему интересны...

Как итог: упрощается код контроллеров, видов и моделей. Модели становятся модульнее и компактнее, лучше расширяемость и переиспользование кода.

Проблема:
Вот в процессе расширения логики моделей столкнулся с ситуацией, когда модель принимая весь пакет параметров может "до кучи" получить и такие, которые она умеет обрабатывать, но они в данном запросе предназначены для другого метода. Причина: например одинаковое именование параметра (получаем из модели при выводе) по причине того что параметр - внешний ключ БД использованный в нескольких моделях. Ну то есть, есть две таблицы, ссылающиеся на одну и ту же. Поле внешнего ключа - названо в обоих одинаково (что само по себе нормально)... нужны записи из обоих моделей, но для одной без параметра, а для другой с параметром...

Конкретный пример для наглядности:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
// 1. Из запроса формируется массив параметров
$this->params['key1'=>..,'key2'=>.., ... , 'keyN'=>...]
// 2. Контроллер после валидации обращается к моделям:
$view->m1 = $m1->getData($this->params); // обработка параметра key1,key2
$view->m2 = $m2->getData2($this->params); // обработка параметра key3, ..., keyN

//... но метод "m2->getData2()" умеет обрабатывать и параметр массива с именем key1, а он в данном контексте точно не нужен...
//... делать так (создавать временный массив параметров вызова):
$view->m2 = $m2->getData2( array('key2'=>$this->params['key2'], ...) );
//... или так (удалять интерферирующее значение):
unset($this->params['key1']);
$view->m2 = $m2->getData2($this->params);
//... считаю "концептуально не совсем неверным"... как "верно"?


То есть суть вопроса в организации передачи параметров из контроллеров в методы моделей, в случаях интерференции именования элементов параметров в моделях.

Хотелось бы понять, наличие корректного решения "в общем виде", а не для конкретной задачи выше.
...
Рейтинг: 0 / 0
MVC передача параметров в модели
    #38199899
mhx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mhx
Гость
Срез массива отправляйте
Код: php
1.
$view->m2 = $m2->getData2(array_slice ($this->params, 2));
...
Рейтинг: 0 / 0
MVC передача параметров в модели
    #38199933
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mhx,

Не получится. Массив параметров - ассоциативный, там нет "порядка элементов" как такового. Да и как делать срез, если надо "выкусить" параметр из середины?

Пока вижу три подхода: первые два - озвучил выше, а третий - это "разделение пространства имен параметров" в моделях при формировании форм. Ну типа 'm1_key1', 'm2_key1' и каждая модель "ловит" только свои... тоже "не айс".

При такой унификации, появляется ещё одна проблемка с безопасностью: при знании структуры кода/данных, можно запузырить доп. параметр в запрос, который, не обработается контроллером (потому как не нужен), но тем не менее, примется моделью и изменит логику её работы... а вид честно отрисуется, поскольку рисует то, что пришло из модели.

... похоже, что для безопасной работы контроллер должен таки не только валидировать вход, но и самостоятельно формировать пакеты параметров для моеделй... то есть вариант1, озвученный выше - верен, хотя и заведомо избыточен.
...
Рейтинг: 0 / 0
MVC передача параметров в модели
    #38199983
mhx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mhx
Гость
Да и как делать срез, если надо "выкусить" параметр из середины?
Если знать смещение этого элемента от начала массива, это не проблема
...
Рейтинг: 0 / 0
MVC передача параметров в модели
    #38199990
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mhx,

пасибки, но нашел другое решение: расслоение моделей бизнес-логики.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / MVC передача параметров в модели
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]