Как определить свои контроллеры в MVC?

Я новичок в MVC, пришедший из фона php, где я проектировал путем просмотра и создавал страницы, когда мне нужно было что-то вроде формы входа в систему. У меня был бы файл с именем login. Это было отстойно, только когда мне понадобилась новая форма входа для входа в систему другого типа пользователя. Скажите админ. Затем мне пришлось бы создать новую страницу с именем login-admin.php или что-то в этом роде.

Недавно я начал изучать MVC и особенно фреймворки, и самая большая проблема, с которой я столкнулся, - это определить, как именно вы создаете свои контроллеры. Мне сказали либо выбрать один контроллер для каждого маршрута файла представления, либо получить ваши контроллеры на основе объектов вашего домена.

Я понимаю, что у меня может быть пользовательский контроллер и множество методов для управления этим объектом, например, user / add, user / edit, user / delete, user / profile. Но в этом случае кажется, что когда вам нужны представления, которые не обязательно вписываются в «объект домена», трудно решить, где их закрепить.

Итак, как лучше всего определить, какими будут ваши контроллеры ???

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
0
1 359
4

Ответы 4

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

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

В Ruby on Rails (и других веб-фреймворках MVC) контроллеры сопоставляются с URL-адресами через какую-то конфигурацию маршрутизации.

Например, / mysection / view / 2 обычно отображается на controller = mysection, method = view, id = 2 (в Rails это отображение по умолчанию в ./config/routes.rb: map.connect ':controller/:action/:id')

Когда вы говорите, что у вас есть «пользовательский контроллер и множество методов для управления этим объектом, например, user / add, user / edit, user / delete, user / profile», я думаю, вы имеете в виду модель - так что у вас будет UserModel.create (), UserModel.find () и т. д. Затем контроллер будет использовать модель для редактирования данных - фактический контроллер должен иметь только несколько строк кода, вызывающих модель (скажем, @myuser = User.find(id)), и несколько методов, которые сопоставлены с URL-адреса (например, /usercontroller/new, /usercontroller/edit, /usercontroller/view)

Это описание было в значительной степени специфичным для Rails, но большинство фреймворков PHP будут очень похожи - я знаю, что CodeIgniter использует почти такую ​​же компоновку.

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

Некоторые фреймворки, такие как struts, предоставляют настраиваемые контроллеры (с использованием xml). Существует также концепция Front Controller, в которой универсальный контроллер действует как делегатор верхнего уровня. Мы можем использовать этот фронт-контроллер для обработки тривиальных сопоставлений (не только для домена).

При создании контроллеров я обычно думаю о том, что видит пользователь и что было бы интуитивно понятно для пользователя, поскольку контроллеры отображаются на URL-адреса.

В вашем примере имеет смысл иметь все связанные с пользователем страницы в формате / user / edit, / user / profile и т. д., Как вы сказали. Однако, если бы я был вами, у меня не было бы отдельной страницы входа для администраторов, я бы использовал то же представление входа в систему и обрабатывал бы бит администратора в другом месте.

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

Другие вопросы по теме