Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Ламерский вопрос про MVC.
|
|||
|---|---|---|---|
|
#18+
Привет :) Захотелось немного углубиться в ооп, решил ради саморазвития сделать свою модель mvc, но возникли вопросы. В общем при заходе на сайт выполняется: 1. Контроллер страницы, к которой обращаемся: Код: php 1. 2. 3. 4. 5. 6. 7. 2. Базовый контроллер: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 3. Модель страницы, к которой обращаемся: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 4. Базовая модель: Код: php 1. 2. 3. 5. Класс View Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Вопрос в следующем: сейчас view грузит одну "заготовку" - include "./app/view/theme/default/tpl/" . $tpl . ".tpl"; , а мне хотелось бы разбить эту заготовку на части: header, contentTop, contentLeft, contentRight и footer. Соответственно у каждой этой части должны быть контроллер и модель. Так вот проблема в том и состоит, что не могу додуматься, как по-очереди вызывать контроллер каждой части, а потом и "собирать" в нужном порядке ? Очень надеюсь на ваши подсказки! Заранее благодарю! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2014, 17:05 |
|
||
|
Ламерский вопрос про MVC.
|
|||
|---|---|---|---|
|
#18+
korshunПривет :) Захотелось немного углубиться в ооп, решил ради саморазвития сделать свою модель mvc, но возникли вопросы. В общем при заходе на сайт выполняется: 1. Контроллер страницы, к которой обращаемся: Код: php 1. 2. 3. 4. 5. 6. 7. 2. Базовый контроллер: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 3. Модель страницы, к которой обращаемся: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 4. Базовая модель: Код: php 1. 2. 3. 5. Класс View Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Вопрос в следующем: сейчас view грузит одну "заготовку" - include "./app/view/theme/default/tpl/" . $tpl . ".tpl"; , а мне хотелось бы разбить эту заготовку на части: header, contentTop, contentLeft, contentRight и footer. Соответственно у каждой этой части должны быть контроллер и модель. Так вот проблема в том и состоит, что не могу додуматься, как по-очереди вызывать контроллер каждой части, а потом и "собирать" в нужном порядке ? Очень надеюсь на ваши подсказки! Заранее благодарю! варианты (это не варианты решения, а просто два подхода обусловленные ситуацией) 1)разбиваем вьюху на части, ибо часть используеться в нескольких местах (например левая панель) тогда файл вюьхи получает переменные(скажем $text $array_data_for_left_panel) и в самой вьюхе вырезаем верстку левой панели, заменяя её на подключение вюьхи с передачей этого масива с даными для левой панели) 2)виджеты так званые, когда для такого кусочка(пример див с числом юзеров на сайте, или логин окошко, где логин форма для гостя, или ссылки на профайл и выход для залогиненого) тут просто вызываеться контроллер этого кусочка, как и контролер целой страницы, и берёться его ответ ввиде уже готового куска верстки. чтобы небыло вывода, а именно схватить эту верстку в переменную, для этого использовать буферизацию ob_start() $login_div = ob_get_clean(); а лучше сделать себе клас - назвав его например виджет чтобы подключить див логин во вьюхе по типу <?Widget::factory('controller_login','action_get_login_widget',$some_param);?> а виджет клас это и сделает, включит буферизацию, запустит контроллер, словит буфер и вернёт его вкачестве результата) ЗЫ потом сможешь и кеширование виджетов добавить легко. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2014, 17:52 |
|
||
|
Ламерский вопрос про MVC.
|
|||
|---|---|---|---|
|
#18+
Спасибо за ответ :) Немного изменил контроллер, вид и сделал доп. шаблон, который и формирует страницу в целом, получилось так: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. home.tpl Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Как-то так в общем. Сильно страшно ?:) И еще. Подскажите пожалуйста ide с поддержкой ООП, ибо пользую сейчас NetBeans - вообще не нравится: например в конструкции $this->registry->getValue("footer"); функция getValue уже не вылазит в выпадающем меню. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2014, 12:00 |
|
||
|
Ламерский вопрос про MVC.
|
|||
|---|---|---|---|
|
#18+
korshun, почти любая нормальная ide поймёт, если юзать PHPDoc... А вот насчёт самого mvc, если тут позволено критиковать то: 1. generateView - излишество... достаточно для showView добавить аргумент $return = false и при установке в true возвращать контент, а при установке в false - выводить. 2. getData в модели - неправильно (как я думаю). Дело в том, что у модели в теории будет уйма методов, которые производят разные манипуляции по отдаче данных контроллеру (получить документ с стороннего сервера, получить логин на вход и отдать данные пользователя на выход, убрать все теги для упрощённого вывода данных etc.). А вот вызывать эти методы должен контроллер, который вызовет 2-3 метода модели и сформирует массив значений для представления... А в представлении они подставятся (ну с этим всё ок). Потому в чистом виде модели не обязаны иметь некие общие одноимённые методы (и для каждой модели эти методы будут разные и работать будут по-разному). А вот когда модели научатся работать с базой, с внешними источниками данных, разрастутся методами для упрощения работы (например валидациями, отдачей определённого списка атрибутов и т.д.), только тогда они будут иметь одинаковые методы :) А то сейчас получается, что у тебя модель умеет просто отдавать некий список своих внутренних полей и всё :) При чём она обязана это уметь (хотя реально модель может быть рассчитана строго на запись данных) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2014, 13:03 |
|
||
|
Ламерский вопрос про MVC.
|
|||
|---|---|---|---|
|
#18+
Програмёр, спасибо за комментарии! Програмёрпочти любая нормальная ide поймёт, если юзать PHPDoc... Очень нравится IDEA, но так и не смог подружить ее с php :( Если подскажете Вы или кто-то другой, как это сделать, буду просто безмерно благодарен! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2014, 13:11 |
|
||
|
Ламерский вопрос про MVC.
|
|||
|---|---|---|---|
|
#18+
korshunПрограмёр, спасибо за комментарии! Програмёрпочти любая нормальная ide поймёт, если юзать PHPDoc... Очень нравится IDEA, но так и не смог подружить ее с php :( Если подскажете Вы или кто-то другой, как это сделать, буду просто безмерно благодарен! Никогда не пробовал (не подскажу) :) Вообще сам сидел на eclipse и netBeans... обе очень неплохие. Хотя некоторые недостатки как и всегда присутствуют. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2014, 14:11 |
|
||
|
Ламерский вопрос про MVC.
|
|||
|---|---|---|---|
|
#18+
авторСильно страшно ?:) УЖОС! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2014, 14:49 |
|
||
|
Ламерский вопрос про MVC.
|
|||
|---|---|---|---|
|
#18+
Я бы советовал больше углубиться в ооп, если можно так выразиться вплане использования вью. а именно echo $conroller->execute(); например. тоесть нам побарабану что возвращает конролер, строку текста, или целую вьюху(обьект) у которого определён могический метод ту стринг class view{ ... protected function _render(){//return view as text } public function __to_string(){return $this->_render();} } с другой стороны, едия о том чтобы вьха могла и возвращать текст и сразу выводить сама тоже имеет место быть(параметр метода рендер) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2014, 17:36 |
|
||
|
|

start [/forum/topic.php?fid=23&msg=38751359&tid=1462421]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
97ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
| others: | 225ms |
| total: | 424ms |

| 0 / 0 |
