Роуты /api/ и некоторые мелочи по контроллерам
This commit is contained in:
@@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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]);
|
||||||
|
|
||||||
|
|||||||
@@ -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');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Переадресует запрос на прямую ссылку плейлиста
|
* Переадресует запрос на прямую ссылку плейлиста
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -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 = [
|
||||||
|
|||||||
@@ -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',
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user