Ответ
Контроллер в архитектурном паттерне Model-View-Controller (MVC) — это компонент, который обрабатывает входящие запросы (обычно HTTP), координирует взаимодействие между Моделью (данные и бизнес-логика) и Представлением (пользовательский интерфейс). Его основная задача — принять входные данные, вызвать соответствующие операции в Модели и определить, какое Представление использовать для формирования ответа.
Роль и ответственность контроллера:
- Маршрутизация: Определяет, какой метод контроллера должен выполниться для данного URL и HTTP-метода.
- Валидация: Проверяет корректность входных данных (параметры запроса, тело, файлы).
- Оркестрация: Вызывает сервисы, репозитории или другие компоненты бизнес-логики (Модель).
- Управление состоянием: Часто работает с сессиями, аутентификацией и авторизацией.
- Выбор ответа: Решает, отрендерить ли HTML-шаблон, вернуть JSON, выполнить редирект или отдать ошибку.
Пример «тощего» контроллера в Laravel:
// UserController.php
namespace AppHttpControllers;
use AppHttpControllersController;
use AppServicesUserService; // Бизнес-логика вынесена в сервис
use IlluminateHttpRequest;
class UserController extends Controller
{
protected $userService;
public function __construct(UserService $userService)
{
$this->userService = $userService;
}
// Обработка GET-запроса для страницы профиля
public function showProfile(Request $request, $userId)
{
// 1. Валидация (может быть вынесена в Form Request)
$request->validate(['userId' => 'required|integer']);
// 2. Вызов сервиса (Модель/бизнес-логика)
$userProfile = $this->userService->getUserProfile($userId);
// 3. Возврат Представления с данными
return view('user.profile', ['profile' => $userProfile]);
}
}
Важно: Современные best practices рекомендуют делать контроллеры максимально «тощими». Сложная бизнес-логика должна находиться в отдельных сервисных классах, слоях Domain или Application, что делает код более тестируемым и поддерживаемым.