60 lines
2.1 KiB
PHP
60 lines
2.1 KiB
PHP
<?php
|
|
|
|
use App\Controllers\ApiController;
|
|
use Psr\Http\Message\ResponseInterface as Response;
|
|
use Psr\Http\Message\ServerRequestInterface as Request;
|
|
use Slim\Factory\AppFactory;
|
|
use Slim\Middleware\ContentLengthMiddleware;
|
|
|
|
require __DIR__ . '/../vendor/autoload.php';
|
|
|
|
// Загрузка переменных окружения
|
|
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__ . '/../');
|
|
$dotenv->load();
|
|
|
|
// Настройка контейнера
|
|
$container = new DI\Container();
|
|
|
|
// Настройка PDO
|
|
$container->set('db', function () {
|
|
$host = $_ENV['DB_HOST'] ?? 'localhost';
|
|
$dbname = $_ENV['DB_NAME'] ?? 'rss_hub';
|
|
$username = $_ENV['DB_USER'] ?? 'rss_hub_user';
|
|
$password = $_ENV['DB_PASS'] ?? 'secure_password';
|
|
|
|
$dsn = "mysql:host=$host;dbname=$dbname;charset=utf8mb4";
|
|
|
|
$options = [
|
|
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
|
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
|
PDO::ATTR_EMULATE_PREPARES => false,
|
|
];
|
|
|
|
return new PDO($dsn, $username, $password, $options);
|
|
});
|
|
|
|
// Установка контейнера для фабрики приложений
|
|
AppFactory::setContainer($container);
|
|
$app = AppFactory::create();
|
|
|
|
// Добавление middleware для определения длины содержимого
|
|
$app->addBodyParsingMiddleware();
|
|
$app->add(new ContentLengthMiddleware());
|
|
|
|
// Основной маршрут API
|
|
$app->get('/api/feeds', [ApiController::class, 'getFeeds']);
|
|
$app->post('/api/feeds', [ApiController::class, 'registerFeed']);
|
|
$app->delete('/api/feeds/{id}', [ApiController::class, 'deleteFeed']);
|
|
$app->get('/api/categories', [ApiController::class, 'getCategories']);
|
|
$app->get('/api/tags', [ApiController::class, 'getTags']);
|
|
|
|
// Маршрут для главной страницы
|
|
$app->get('/', function (Request $request, Response $response) {
|
|
$response->getBody()->write(file_get_contents(__DIR__ . '/../templates/index.html'));
|
|
return $response->withHeader('Content-Type', 'text/html');
|
|
});
|
|
|
|
// Обработка ошибок
|
|
$errorMiddleware = $app->addErrorMiddleware($_ENV['APP_DEBUG'] ?? false, true, true);
|
|
|
|
$app->run(); |