Rudra Framework
Когда Rudra получает HTTP-запрос, он проходит через четыре фазы инициализации и выполнения. Понимание этого цикла критически важно для эффективной разработки и отладки.
Первым делом вызывается метод shipInit() из App\Ship\ShipController.
Что происходит:
Этот этап выполняется один раз за запрос, до маршрутизации.
Rudra:
При первом обращении к контроллеру из контейнера вызывается containerInit() из его базового класса (например, WebController).
Что происходит:
Rudra::binding()->set($config['contracts']);
Rudra::waiting()->set($config['services']);Настраивается шаблонизатор:
View::setup(dirname(__DIR__) . "/Web/UI/tmpl", "Web_");✅Этот этап выполняется один раз на контейнер за запрос.
Rudra вызывает метод-действие, помеченный #[Routing].
Что происходит:
⚠️В методах контроллеров параметры DI (объекты) должны идти строго перед URL-параметрами:
// ✅ Правильно
public function show(User $user, int $id, string $slug): void
{
// $user — внедрён через DI
// $id, $slug — из маршрута :id/:slug
}// ❌ Неправильно
public function show(int $id, User $user, string $slug): void
{
// Rudra не сможет определить, какой аргумент откуда брать
}ℹ️Это требование связано с тем, что Rudra сначала разрешает все типизированные зависимости через DI, а затем подставляет скалярные значения из URL в оставшиеся позиции.
HTTP-запрос
↓
App\Ship\ShipController::shipInit()
↓
Определение контейнера и маршрута
↓
{Container}Controller::containerInit()
↓
Before-middleware → Контроллер → After-middleware
↓
HTTP-ответ