2015-04-18 5 views
5

Я только начал смотреть на шаблон MVC. Мой вопрос:PHP MVC структура, где класть собственные классы

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

Должен ли я создавать классы в Controller внутри функции model?

<?php 

class Controller { 
    protected function model($model) { 
     require_once('../app/models/'. $model .'.php'); 

     return new $model(); 
    } 

    protected function view($view, $data = []) { 
     require_once '../app/views/'. $view .'.php'; 
    } 
} 
+0

Похоже, вы отказались от изучения MVC и вместо этого решили изучить Laravel. Ну ... что бы ни платил законопроект, я думаю, в случае, если у вас появится желание снова начать узнавать о MVC, вы можете пройти лекции и другие материалы, перечисленные здесь: http://stackoverflow.com/a/16356866/727208 –

ответ

2

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

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

Должен ли я создавать классы в контроллере внутри функции модели?

No. Насколько я понимаю, поток может быть аналогичен:

  1. Файл index получает запрос и инициирует новый экземпляр bootstrap
  2. bootstrap устанавливает метательный обработчик и маршрутизатор
  3. router затем вызывает соответствующий метод на основе метода запроса и uri, предоставленного путем сопоставления с набором маршрутов
  4. Соответствие route инициализирует все компоненты триады MVC и вызываемого метода. Компоненты (слой Model, слой View и слой Controller) передаются методу, вызванному router. В моем случае я вызываю класс FrontController, метод init.
  5. В основном, init - это место, где фактически создана триада MVC. Уровень Model отвечает за бизнес-логику, настойчивость и т. Д.Важно отметить, что Model не является ни одним файлом или классом (то же самое для View и Controller). Оба слоя View и слой Controller проконсультируйтесь с уровнем Model, чтобы выполнить соответствующие действия. View Задача слоя состоит в том, чтобы управлять выходом, например, решить, будет ли выходной сигнал Content-Typeapplication/json или text/plain, или который Template для визуализации. Кроме того, Views не являются Templates, которые предназначены для отображения данных. Обратите внимание, что Views запрашивает необходимые данные непосредственно из слоя Model; нет никакого взаимодействия с уровнем Controller. Наконец, шаги Controller выполняются, когда возникает потребность в взаимодействии , например, пользователь представляет форму, соответствующий Controller фильтрует входной сигнал и вызывает метод с уровня Model.
+0

Downvoted, потому что: 1. выступает за вычисление в конструкторе; 2. использование статических классов; 3 контроллер не обрабатывает связь (модель просмотра в MVVM); 4. Ваше предложение о создании контроллера в объекте god действительно беспокоит –

+0

@ tereško обновлено. – sitilge

+1

да, это явное улучшение ... есть upvote –

1

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

В отношении других компонентов, Database утилита и может быть размещен, например, в каталоге lib, User модель и может перейти в папку model и Logger/Mailer может также пойти в Lib папку. Это примеры, а не что-то строго следовать.

Что касается конкретизации, каждый Controller может определить список models и libraries это зависит и иметь MVC рамки обрабатывать инициализацию этих объектов. Таким образом, вы должны следовать шаблону dependency injection.

Смежные вопросы