Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
MVC передача параметров в модели
|
|||
|---|---|---|---|
|
#18+
В ходе рефакторинга кода и его оптимизации, столкнулся с некоторой "теоретической" проблемой, решил отписать тут, может кто знает подходящее решение: Дано: Организация кода согласно шаблону MVC (вариант пассивная модель). Более того, код сильно "унифицирован", а именно: все приходящие параметры запроса get, post, cookie и т.д. кодом диспетчера запроса формируются в единый массив $params для единообразной работы всех контроллеров. Далее. Представление (форма отдаваемая в браузер) создается динамически с идентификацией элементов, получаемой из моделей бизнес-логики... что позволяет ожидать параметры запроса заведомо одинаково именованные с элементами в моделях БЛ (а зачастую и моделях БД). Это унификация на практике позволяет принятый массив параметров передавать напрямую в методы классов моделей после прохождения валидации в контроллере, без каких либо переприсваиваний и перетасовок в циклах из массива в массив. Каждый такой метод моделей, принимая обобщенный массив параметров использует только те, которые ему интересны... Как итог: упрощается код контроллеров, видов и моделей. Модели становятся модульнее и компактнее, лучше расширяемость и переиспользование кода. Проблема: Вот в процессе расширения логики моделей столкнулся с ситуацией, когда модель принимая весь пакет параметров может "до кучи" получить и такие, которые она умеет обрабатывать, но они в данном запросе предназначены для другого метода. Причина: например одинаковое именование параметра (получаем из модели при выводе) по причине того что параметр - внешний ключ БД использованный в нескольких моделях. Ну то есть, есть две таблицы, ссылающиеся на одну и ту же. Поле внешнего ключа - названо в обоих одинаково (что само по себе нормально)... нужны записи из обоих моделей, но для одной без параметра, а для другой с параметром... Конкретный пример для наглядности: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. То есть суть вопроса в организации передачи параметров из контроллеров в методы моделей, в случаях интерференции именования элементов параметров в моделях. Хотелось бы понять, наличие корректного решения "в общем виде", а не для конкретной задачи выше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2013, 08:26 |
|
||
|
MVC передача параметров в модели
|
|||
|---|---|---|---|
|
#18+
Срез массива отправляйте Код: php 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2013, 08:53 |
|
||
|
MVC передача параметров в модели
|
|||
|---|---|---|---|
|
#18+
mhx, Не получится. Массив параметров - ассоциативный, там нет "порядка элементов" как такового. Да и как делать срез, если надо "выкусить" параметр из середины? Пока вижу три подхода: первые два - озвучил выше, а третий - это "разделение пространства имен параметров" в моделях при формировании форм. Ну типа 'm1_key1', 'm2_key1' и каждая модель "ловит" только свои... тоже "не айс". При такой унификации, появляется ещё одна проблемка с безопасностью: при знании структуры кода/данных, можно запузырить доп. параметр в запрос, который, не обработается контроллером (потому как не нужен), но тем не менее, примется моделью и изменит логику её работы... а вид честно отрисуется, поскольку рисует то, что пришло из модели. ... похоже, что для безопасной работы контроллер должен таки не только валидировать вход, но и самостоятельно формировать пакеты параметров для моеделй... то есть вариант1, озвученный выше - верен, хотя и заведомо избыточен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2013, 09:21 |
|
||
|
MVC передача параметров в модели
|
|||
|---|---|---|---|
|
#18+
Да и как делать срез, если надо "выкусить" параметр из середины? Если знать смещение этого элемента от начала массива, это не проблема ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2013, 10:01 |
|
||
|
|

start [/forum/topic.php?fid=23&fpage=116&tid=1463973]: |
0ms |
get settings: |
6ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
36ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
| others: | 291ms |
| total: | 420ms |

| 0 / 0 |
