38 lines
1.1 KiB
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);
|
|
}
|
|
}
|