Ответ
Да, постоянно. Контроллер — это центральный элемент обработки 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);
}
}
Ключевые принципы, которых я придерживаюсь: контроллеры должны быть тонкими. Вся бизнес-логика выносится в сервис-классы, формы-объекты или в сами модели, чтобы контроллер оставался читаемым и отвечал только за координацию действий.
Ответ 18+ 🔞
А, ну это же классика, ёпта! Контроллеры — это как раз те самые ребята, которые в центре всей этой движухи с HTTP-запросами в MVC. Представь себе диспетчера на складе: к нему приезжает фура с заказом (это запрос), он бегает по складу (это модель), находит нужные коробки (данные), и отдаёт их грузчику, чтобы тот красиво упаковал (это вид).
Вот, смотри, простейший пример контроллера для каких-нибудь статей. Всё по делу, без лишней ерунды.
<?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);
}
}
А теперь главный секрет, который половина новичков игнорирует, а потом охуевает от спагетти-кода. Контроллер должен быть тонким, ядрёна вошь! Не надо в него пихать овердохуища бизнес-логики. Он — координатор, а не работяга. Всякую сложную хуйню типа расчётов, проверок, работы с внешними API — выноси в сервис-классы, формы или прямо в модели. Чтобы вот этот файл сверху оставался читаемым, и через месяц ты, глядя на него, не чувствовал подозрение, блядь, а понимал, что тут происходит. Иначе получится пиздопроебибна, в которой разобраться будет невозможно. Доверия к такому коду — ноль, ебать.