Enable Discovery debug logging for production troubleshooting

- Add DISCOVERY_LOG_LEVEL=debug
- Add DISCOVERY_SHOW_PROGRESS=true
- Temporary changes for debugging InitializerProcessor fixes on production
This commit is contained in:
2025-08-11 20:13:26 +02:00
parent 59fd3dd3b1
commit 55a330b223
3683 changed files with 2956207 additions and 16948 deletions

View File

@@ -8,9 +8,13 @@ use App\Framework\Core\PathProvider;
use App\Framework\DI\DefaultContainer;
use App\Framework\Http\Headers;
use App\Framework\Http\HttpResponse;
use App\Framework\Http\Request;
use App\Framework\Http\Response;
use App\Framework\Http\Responses\JsonResponse;
use App\Framework\Http\Responses\RedirectResponse;
use App\Framework\Http\Responses\SseResponse;
use App\Framework\Http\Responses\WebSocketResponse;
use App\Framework\Http\Uri;
use App\Framework\Router\Result\FileResult;
use App\Framework\Router\Result\JsonResult;
use App\Framework\Router\Result\Redirect;
@@ -20,7 +24,6 @@ use App\Framework\Router\Result\WebSocketResult;
use App\Framework\View\RenderContext;
use App\Framework\View\Template;
use App\Framework\View\TemplateRenderer;
use App\Framework\View\TemplateRendererInitializer;
final readonly class RouteResponder
{
@@ -28,36 +31,42 @@ final readonly class RouteResponder
private PathProvider $pathProvider,
private DefaultContainer $container,
private TemplateRenderer $templateRenderer,
) {}
private Request $request,
) {
}
public function getContext(ViewResult $result): RenderContext
{
return new RenderContext(
template: $result->model ? $this->resolveTemplate($result->model) : $result->template,
metaData: $result->metaData,
data: $result->model ? get_object_vars($result->model) + $result->data : $result->data,
layout: '',
slots: $result->slots,
isPartial: $this->isSpaRequest(),
);
}
public function respond(Response|ActionResult $result): Response
{
if($result instanceof Response) {
if ($result instanceof Response) {
return $result;
}
if ($this->isSpaRequest() && $result instanceof ViewResult) {
return $this->createSpaResponse($result);
}
return match(true) {
$result instanceof ViewResult => new HttpResponse(
status: $result->status,
body: $this->renderTemplate(
new RenderContext(
template: $result->model ? $this->resolveTemplate($result->model) : $result->template,
metaData: $result->metaData,
data: $result->model ? get_object_vars($result->model) + $result->data : $result->data,
layout: '',
slots: $result->slots
)
)
body: $this->renderTemplate($this->getContext($result))
),
$result instanceof JsonResult => new HttpResponse(
$result instanceof JsonResult => new JsonResponse(
body : $result->data,
status : $result->status,
headers: new Headers()->with('Content-Type', 'application/json'),
body : json_encode($result->data),
),
$result instanceof Redirect => new HttpResponse(
status: $result->status,
headers: new Headers()->with('Location', $result->target)
),
$result instanceof Redirect => new RedirectResponse(new Uri($result->target)),
$result instanceof SseResult => new SseResponse($result, $result->callback),
$result instanceof WebSocketResult => $this->createWebSocketResponse($result),
$result instanceof FileResult => new HttpResponse(
@@ -82,9 +91,40 @@ final readonly class RouteResponder
return $this->templateRenderer->render($context);
}
private function resolveTemplate(?object $model):string
private function isSpaRequest(): bool
{
if($model === null) {
$xmlHttpRequest = $this->request->headers->getFirst('X-Requested-With');
$hasSpaRequest = $this->request->headers->has('X-SPA-Request');
// Fallback: Direkt aus $_SERVER lesen (für Nginx FastCGI)
if (empty($xmlHttpRequest)) {
$xmlHttpRequest = $_SERVER['HTTP_X_REQUESTED_WITH'] ?? '';
}
if (! $hasSpaRequest) {
$hasSpaRequest = ! empty($_SERVER['HTTP_X_SPA_REQUEST']);
}
return $xmlHttpRequest === 'XMLHttpRequest' && $hasSpaRequest;
}
private function createSpaResponse(ViewResult $result): JsonResponse
{
$context = $this->getContext($result);
return new JsonResponse([
'html' => $this->templateRenderer->renderPartial($context),
'title' => $result->metaData->title ?? '',
'meta' => [
'description' => $result->metaData->description ?? '',
// Add other meta data as needed
],
]);
}
private function resolveTemplate(?object $model): string
{
if ($model === null) {
return 'test';
}
@@ -97,6 +137,7 @@ final readonly class RouteResponder
/** @var Template $attr */
$attr = $attrs[0]->newInstance();
return $attr->path;
}
}