Нужно легкое понимание шаблона MVC - PullRequest
0 голосов
/ 04 сентября 2011

У вас есть URL: Http: ///www.site.com/controller/method/values/1/2/3

Должен ли я всегда вызывать контроллер или можно вызвать вызываемое представление и создавать экземпляр контроллера внутри представления или в файле начальной загрузки, ссылаясь на это представление?

Чего я не понимаю, если мне нужно более одного контроллера в представлении, как это заархивировать?

Например: На моей странице указателя я хочу запустить простую CMS, где администратор может изменять текстовые блоки и изображения сайта. Это было бы на контроллере управления контентом. На моей странице индекса я также получил информацию о последних добавленных продуктах vitrine, которые будут контролироваться продуктами контроллера. Если я определю www.site.com/contentmanagement или www.site.com для запуска контроллера управления контентом, как будет называться контроллер продукта?

Также еще один пример. В моем меню я получил ссылку на страницу aboutus, которая была бы простой страницей, и единственной необходимой функцией был бы контроллер управления контентом для управления текстовыми блоками.

Если я буду следовать шаблону, который я читаю повсюду, я закончу ссылкой, например: http://www.site.com/contentmanagement/method/aboutus

Какая-то потеряна здесь, потому что, конечно, этот URL будет выглядеть странно. Было бы намного проще иметь URL-адрес, вызывающий представление http://www.site.com/aboutus, и загрузочный файл, в котором я могу указать контроллеру, который должен быть загружен, когда серфер находится там ...

загрузчик будет выглядеть так:

Переключатель ($ вид) case: index Контроллер загрузки контента продукт нагрузки контроллера case: aboutus Контроллер загрузки контента

Я ценю любую помощь или свет здесь, спасибо.

кстати, я кодирую в PHP.

Ответы [ 4 ]

1 голос
/ 04 сентября 2011

Хм, если вы хотите иметь текстовые блоки и изображения сайта (один контроллер) и продукты vitrine (второй контроллер), то вызовите нужные методы в одном контроллере.

Я бы сделалэто так: когда вы запрашиваете страницу индекса со всеми элементами, которые вы упомянули выше, на самом деле вызывается один контроллер, и он решает, какое представление показывать ... поэтому в этом контроллере вы вызываете все необходимые методы, получаете данные,и передать его в представление .. если методы вызываются из других контроллеров, просто вызовите эти методы и получите данные .. Я часто делаю некоторые статические методы в контроллерах, которые я могу вызвать где угодно, поэтому мне не нужно создавать экземплярывесь объект ..

Например, вы вызываете www.site.com/contentmanagement, вызывается контроллер, который отображает представление индекса, и в этом контроллере вы вызываете все необходимые методы, подготавливаете данные и передаете ихданные для окончательного просмотра, который будет отображаться ..

1 голос
/ 04 сентября 2011

Должен ли я всегда вызывать контроллер или можно ((бла бла ..)?

Это зависит от того, что вы понимаете под "call ".

. Контроллеру требуется возможность изменять состояние как вида, так и модели.И каждому представлению требуется возможность запрашивать данные (в Model2 MVC ) из моделей.

Контроллер мысли не должен вызывать рендеринг представления (что является общим для всех сторонников RoR)так же, как View не имеет смысла выполнять действия на контроллере.

Чего я не получаю, если мне нужно более одного контроллера для представления, как его заархивировать?

Представления и контроллеры должны иметь отношение 1: 1.Если вашему представлению требуется более одного контроллера, вы можете изучить архитектуру HMVC .

Например: на моей странице индекса я хочу запустить простую CMS, (..больше бла ..) как будет называться контроллер продукта?

CMS должен быть отдельным приложением (или хотя бы модулем) с несколькими контроллерами.

Если я следуюобразец, который я читаю повсюду, я закончу ссылкой как: http://www.site.com/contentmanagement/method/aboutus?

Почему бы не просто http://site.com/cms/content/2/edit (где 2 - это идентификатор страницы "о нас").Не существует закона, который гласит, что структура URL для администрирования сайта должна отражать общедоступную страницу ... черт ... это может вызвать повышенную уязвимость.

0 голосов
/ 04 сентября 2011

Я собираюсь попробовать пройтись

Чего я не получу, если мне нужно более 1 контроллера в представлении, как его заархивировать?

Дляпример: на моей странице указателя я хочу запустить простую CMS, где администратор может изменять текстовые блоки и изображения сайта.Это было бы на контроллере управления контентом.На моей странице индекса я также получил информацию о последних добавленных продуктах vitrine, которые будут контролироваться продуктами контроллера.Если я определю www.site.com/contentmanagement или www.site.com для запуска контроллера управления контентом, как будет называться контроллер продукта?

Наличие URL-адреса, содержащего имя контроллера, определенно хорошо, но это не требование для MVC.Таким образом, вам не нужно привязывать ваш контроллер к самому URL.Классический MVC не привязан к определенному соглашению об именах, поэтому вы можете вызывать свой контроллер продукта через другой URL, который затем обрабатывает продукт и отображает представление для продукта. Для MVC важно иметь один контроллер, который имеет дело с наборамимодель и в результате в одном виде в качестве уровня представления.В вашем конкретном примере ваша точка входа выглядит как единый контроллер, который взаимодействует как с ContentManagement, так и с классом / модулем продукта, и в результате этого взаимодействия создается единое представление.

bootstrap would look like:
switch($view)
case: index
controller load contentmanagement
controller load product
case: aboutus
controller load contentmanagement

Таким образом, ваше первоначальное взаимодействие выше не является полностьювыключено, за исключением того, что вы на самом деле не вызываете два контроллера, а скорее делаете следующее при нажатии на индекс:

  • Загрузите контроллер, давайте назовем этот IndexController
  • Загрузите модуль ContentManagement, чтобы получитьсвязанного содержимого, вы можете разместить эту информацию как часть вашей модели для страницы индекса.
  • Загрузить модуль продукта, чтобы получить связанные продукты, снова поместите его в вашу модель
  • . Передайте модель, содержащуюинформация для рендеринга страницы в представление
  • В вашем представлении вы визуализируете модель, которая содержит и содержимое из модуля ContentManagement, и список продуктов из модуля Product, в результате чего создается единое представление
* 1025.*

Если я буду следовать схеме, яЯ читаю повсюду. Я закончу ссылкой, например: http://www.site.com/contentmanagement/method/aboutus?

Это опять-таки не требование, вы должны следовать тому, что имеет смысл и легче для пользователей.Кроме того, если вам необходимо соблюдать соглашения, вы всегда можете сделать свой URL красивым, используя сопоставление URL.

0 голосов
/ 04 сентября 2011

То, что вы ищете, называется HMVC , и есть пара платформ для этого, например Kohana .

Также см. Этот вопрос:

Что такое шаблон HMVC?

...