[MVC] Полная миграция на MVC архитектуру

- Создано ядро MVC: App, Router, Controller, Model, View, Database
- Созданы модели: User, Product, Category, Cart, Order
- Созданы контроллеры: Home, Auth, Product, Cart, Order, Page, Admin
- Созданы layouts и partials для представлений
- Добавлены все views для страниц
- Настроена маршрутизация с чистыми URL
- Обновлена конфигурация Docker и Apache для mod_rewrite
- Добавлена единая точка входа public/index.php
This commit is contained in:
kirill.khorkov
2026-01-03 11:48:14 +03:00
parent 3f257120fa
commit d2c15ec37f
53 changed files with 8650 additions and 30 deletions

51
config/app.php Normal file
View File

@@ -0,0 +1,51 @@
<?php
/**
* Конфигурация приложения
*/
return [
// Название приложения
'name' => 'AETERNA',
// Режим отладки
'debug' => true,
// URL приложения
'url' => 'http://localhost',
// Базовый путь (для Docker)
'base_path' => '/cite_practica',
// Часовой пояс
'timezone' => 'Europe/Moscow',
// Локаль
'locale' => 'ru_RU',
// Email администраторов (получают права администратора при регистрации)
'admin_emails' => [
'admin@aeterna.ru',
'administrator@aeterna.ru',
'aeterna@mail.ru'
],
// Настройки сессии
'session' => [
'lifetime' => 120, // минуты
'secure' => false,
'http_only' => true
],
// Настройки доставки
'delivery' => [
'default_price' => 2000,
'free_from' => 50000, // Бесплатная доставка от этой суммы
],
// Промокоды
'promo_codes' => [
'SALE10' => ['type' => 'percent', 'value' => 10],
'FREE' => ['type' => 'free_delivery', 'value' => 0],
]
];

View File

@@ -1,32 +1,14 @@
<?php
// config/database.php
class Database {
private static $instance = null;
private $connection;
private function __construct() {
try {
$this->connection = new PDO(
"pgsql:host=localhost;dbname=aeterna_db;",
"postgres",
"1234"
);
$this->connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->connection->exec("SET NAMES 'utf8'");
} catch(PDOException $e) {
die("Ошибка подключения: " . $e->getMessage());
}
}
public static function getInstance() {
if (self::$instance == null) {
self::$instance = new Database();
}
return self::$instance;
}
public function getConnection() {
return $this->connection;
}
}
?>
/**
* Конфигурация базы данных
*/
return [
'driver' => 'pgsql',
'host' => '185.130.224.177',
'port' => '5481',
'database' => 'postgres',
'username' => 'admin',
'password' => '38feaad2840ccfda0e71243a6faaecfd',
'charset' => 'utf8',
];

66
config/routes.php Normal file
View File

@@ -0,0 +1,66 @@
<?php
/**
* Определение маршрутов приложения
*
* @var \App\Core\Router $router
*/
// ========== Главная страница ==========
$router->get('/', 'HomeController', 'index');
$router->get('/home', 'HomeController', 'index');
// ========== Авторизация ==========
$router->get('/login', 'AuthController', 'loginForm');
$router->post('/login', 'AuthController', 'login');
$router->get('/register', 'AuthController', 'registerForm');
$router->post('/register', 'AuthController', 'register');
$router->get('/logout', 'AuthController', 'logout');
// ========== Каталог и товары ==========
$router->get('/catalog', 'ProductController', 'catalog');
$router->get('/product/{id}', 'ProductController', 'show');
// ========== Корзина ==========
$router->get('/cart', 'CartController', 'index');
$router->post('/cart/add', 'CartController', 'add');
$router->post('/cart/update', 'CartController', 'update');
$router->post('/cart/remove', 'CartController', 'remove');
$router->get('/cart/count', 'CartController', 'count');
// ========== Заказы ==========
$router->get('/checkout', 'OrderController', 'checkout');
$router->post('/order', 'OrderController', 'create');
// ========== Статические страницы ==========
$router->get('/services', 'PageController', 'services');
$router->get('/delivery', 'PageController', 'delivery');
$router->get('/warranty', 'PageController', 'warranty');
// ========== Админ-панель ==========
$router->get('/admin', 'AdminController', 'dashboard');
// Управление товарами
$router->get('/admin/products', 'AdminController', 'products');
$router->get('/admin/products/add', 'AdminController', 'addProduct');
$router->post('/admin/products/add', 'AdminController', 'storeProduct');
$router->get('/admin/products/edit/{id}', 'AdminController', 'editProduct');
$router->post('/admin/products/edit/{id}', 'AdminController', 'updateProduct');
$router->post('/admin/products/delete/{id}', 'AdminController', 'deleteProduct');
// Управление категориями
$router->get('/admin/categories', 'AdminController', 'categories');
$router->get('/admin/categories/add', 'AdminController', 'addCategory');
$router->post('/admin/categories/add', 'AdminController', 'storeCategory');
$router->get('/admin/categories/edit/{id}', 'AdminController', 'editCategory');
$router->post('/admin/categories/edit/{id}', 'AdminController', 'updateCategory');
$router->post('/admin/categories/delete/{id}', 'AdminController', 'deleteCategory');
// Управление заказами
$router->get('/admin/orders', 'AdminController', 'orders');
$router->get('/admin/orders/{id}', 'AdminController', 'orderDetails');
$router->post('/admin/orders/{id}/status', 'AdminController', 'updateOrderStatus');
// Управление пользователями
$router->get('/admin/users', 'AdminController', 'users');