misuzu/src/Redirects/NamedRedirectsRoutes.php

38 lines
1.1 KiB
PHP

<?php
namespace Misuzu\Redirects;
use RuntimeException;
use Index\Config\Config;
use Index\Http\{HttpRequest,HttpResponseBuilder};
use Index\Http\Routing\{HttpGet,RouteHandler,RouteHandlerTrait};
class NamedRedirectsRoutes implements RouteHandler {
use RouteHandlerTrait;
private Config $config;
public function __construct(
private RedirectsContext $redirectsCtx,
) {
$this->config = $redirectsCtx->config->scopeTo('named');
}
#[HttpGet('/([A-Za-z0-9\-_]+)')]
public function getNamedRedirect(HttpResponseBuilder $response, HttpRequest $request, string $name) {
try {
$redirectInfo = $this->redirectsCtx->named->getNamedRedirect(
$name,
NamedRedirectsData::NAMED_BY_ID | NamedRedirectsData::NAMED_BY_VANITY
);
} catch(RuntimeException $ex) {
return 404;
}
$url = $redirectInfo->url;
$params = $request->getParamString();
if(!empty($params))
$url .= (strpos($url, '?') === false ? '?' : '&') . $params;
$response->redirect($url, true);
}
}