Использовали ли вы Controller в своем фреймворке?

«Использовали ли вы Controller в своем фреймворке?» — вопрос из категории Архитектура, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, постоянно. Контроллер — это центральный элемент обработки HTTP-запросов в MVC-архитектуре.

Например, в Laravel контроллер получает запрос от маршрутизатора, взаимодействует с моделью (Model) для получения или изменения данных, и возвращает представление (View) или JSON-ответ.

Пример контроллера для работы со статьями:

<?php
namespace AppHttpControllers;

use AppModelsArticle;
use IlluminateHttpRequest;

class ArticleController extends Controller
{
    // Показать список статей
    public function index()
    {
        $articles = Article::published()->latest()->paginate(10);
        return view('articles.index', compact('articles'));
    }

    // Показать одну статью
    public function show(Article $article) // Используем неявное связывание моделей (Route Model Binding)
    {
        return view('articles.show', compact('article'));
    }

    // Сохранить новую статью (с валидацией)
    public function store(Request $request)
    {
        $validated = $request->validate([
            'title' => 'required|string|max:255',
            'body' => 'required',
        ]);

        $article = Article::create($validated);
        return redirect()->route('articles.show', $article);
    }
}

Ключевые принципы, которых я придерживаюсь: контроллеры должны быть тонкими. Вся бизнес-логика выносится в сервис-классы, формы-объекты или в сами модели, чтобы контроллер оставался читаемым и отвечал только за координацию действий.