Роуты /api/ и некоторые мелочи по контроллерам

This commit is contained in:
2025-07-19 21:20:30 +08:00
parent 36c3570e05
commit 5c4554b9f9
6 changed files with 36 additions and 42 deletions

View File

@@ -21,6 +21,30 @@ use Psr\Http\Message\ServerRequestInterface;
*/ */
class ApiController extends BasicController class ApiController extends BasicController
{ {
/**
* Возвращает информацию о плейлисте
*
* @param ServerRequestInterface $request
* @param ResponseInterface $response
* @return ResponseInterface
* @throws Exception
*/
public function getOne(ServerRequestInterface $request, ResponseInterface $response): ResponseInterface
{
try {
$code = $request->getAttributes()['code'] ?? null;
empty($code) && throw new PlaylistNotFoundException('');
$playlist = ini()->getPlaylist($code);
if ($playlist['isOnline'] === true) {
unset($playlist['content']);
}
return $this->responseJson($response, 200, $playlist);
} catch (PlaylistNotFoundException $e) {
return $this->responseJsonError($response, 404, $e);
}
}
/** /**
* Возвращает информацию о каналов плейлиста * Возвращает информацию о каналов плейлиста
* *
@@ -56,24 +80,4 @@ class ApiController extends BasicController
return $response->withStatus(200) return $response->withStatus(200)
->withHeader('Content-Type', $mime); ->withHeader('Content-Type', $mime);
} }
/**
* Возвращает информацию о плейлисте
*
* @param ServerRequestInterface $request
* @param ResponseInterface $response
* @return ResponseInterface
* @throws Exception
*/
public function json(ServerRequestInterface $request, ResponseInterface $response): ResponseInterface
{
$code = $request->getAttributes()['code'];
try {
$playlist = ini()->getPlaylist($code);
return $this->responseJson($response, 200, $playlist);
} catch (PlaylistNotFoundException $e) {
return $this->responseJsonError($response, 404, $e);
}
}
} }

View File

@@ -34,7 +34,7 @@ class BasicController
*/ */
public function notFound(ServerRequestInterface $request, ResponseInterface $response): ResponseInterface public function notFound(ServerRequestInterface $request, ResponseInterface $response): ResponseInterface
{ {
$code = $request->getAttributes()['code']; $code = $request->getAttributes()['code'] ?? '';
$response->withStatus(404); $response->withStatus(404);
$this->view($request, $response, 'notfound.twig', ['code' => $code]); $this->view($request, $response, 'notfound.twig', ['code' => $code]);

View File

@@ -63,21 +63,6 @@ class WebController extends BasicController
]); ]);
} }
/**
* Возвращает страницу FAQ
*
* @param ServerRequestInterface $request
* @param ResponseInterface $response
* @return ResponseInterface
* @throws LoaderError
* @throws RuntimeError
* @throws SyntaxError
*/
public function faq(ServerRequestInterface $request, ResponseInterface $response): ResponseInterface
{
return $this->view($request, $response, 'faq.twig');
}
/** /**
* Переадресует запрос на прямую ссылку плейлиста * Переадресует запрос на прямую ссылку плейлиста
* *

View File

@@ -41,7 +41,11 @@ class IniFile
// сохраняем порядок // сохраняем порядок
foreach (array_keys($ini) as $code) { foreach (array_keys($ini) as $code) {
$data = redis()->get($code); try {
$data = @redis()->get($code);
} catch (Throwable) {
$data = false;
}
if ($data === false) { if ($data === false) {
$raw = $ini[$code]; $raw = $ini[$code];
$data = [ $data = [

View File

@@ -6,6 +6,7 @@
*/ */
use App\Controllers\ApiController; use App\Controllers\ApiController;
use App\Controllers\BasicController;
use App\Controllers\BotController; use App\Controllers\BotController;
use App\Controllers\WebController; use App\Controllers\WebController;
@@ -56,13 +57,13 @@ return [
[ [
'method' => 'GET', 'method' => 'GET',
'path' => '/{code:[0-9a-zA-Z]+}/json', 'path' => '/api/playlists/{code:[0-9a-zA-Z]+}',
'handler' => [ApiController::class, 'json'], 'handler' => [ApiController::class, 'getOne'],
'name' => 'json', 'name' => 'api::getOne',
], ],
[ [
'method' => 'GET', 'method' => 'GET',
'path' => '/{code:[0-9a-zA-Z]+}/qrcode', 'path' => '/api/playlists/{code:[0-9a-zA-Z]+}/qrcode',
'handler' => [ApiController::class, 'makeQrCode'], 'handler' => [ApiController::class, 'makeQrCode'],
'name' => 'api::makeQrCode', 'name' => 'api::makeQrCode',
], ],

View File

@@ -175,7 +175,7 @@
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div> </div>
<div class="modal-body text-center"> <div class="modal-body text-center">
<img src="/{{ playlist.code }}/qrcode" alt=""> <img src="/api/playlists/{{ playlist.code }}/qrcode" alt="">
</div> </div>
</div> </div>
</div> </div>