[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:
148
app/Core/Controller.php
Normal file
148
app/Core/Controller.php
Normal file
@@ -0,0 +1,148 @@
|
||||
<?php
|
||||
|
||||
namespace App\Core;
|
||||
|
||||
/**
|
||||
* Controller - базовый класс контроллера
|
||||
*/
|
||||
abstract class Controller
|
||||
{
|
||||
/**
|
||||
* Данные для передачи в представление
|
||||
*/
|
||||
protected array $data = [];
|
||||
|
||||
/**
|
||||
* Отрендерить представление
|
||||
*/
|
||||
protected function view(string $view, array $data = [], string $layout = 'main'): void
|
||||
{
|
||||
echo View::render($view, $data, $layout);
|
||||
}
|
||||
|
||||
/**
|
||||
* Отрендерить представление без layout
|
||||
*/
|
||||
protected function viewPartial(string $view, array $data = []): void
|
||||
{
|
||||
echo View::render($view, $data, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Вернуть JSON ответ
|
||||
*/
|
||||
protected function json(array $data, int $statusCode = 200): void
|
||||
{
|
||||
http_response_code($statusCode);
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
echo json_encode($data, JSON_UNESCAPED_UNICODE);
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* Редирект на другой URL
|
||||
*/
|
||||
protected function redirect(string $url): void
|
||||
{
|
||||
header("Location: {$url}");
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить текущего пользователя из сессии
|
||||
*/
|
||||
protected function getCurrentUser(): ?array
|
||||
{
|
||||
if (!isset($_SESSION['isLoggedIn']) || $_SESSION['isLoggedIn'] !== true) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return [
|
||||
'id' => $_SESSION['user_id'] ?? null,
|
||||
'email' => $_SESSION['user_email'] ?? '',
|
||||
'full_name' => $_SESSION['full_name'] ?? '',
|
||||
'phone' => $_SESSION['user_phone'] ?? '',
|
||||
'city' => $_SESSION['user_city'] ?? '',
|
||||
'is_admin' => $_SESSION['isAdmin'] ?? false,
|
||||
'login_time' => $_SESSION['login_time'] ?? null
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверить, авторизован ли пользователь
|
||||
*/
|
||||
protected function isAuthenticated(): bool
|
||||
{
|
||||
return isset($_SESSION['isLoggedIn']) && $_SESSION['isLoggedIn'] === true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверить, является ли пользователь администратором
|
||||
*/
|
||||
protected function isAdmin(): bool
|
||||
{
|
||||
return $this->isAuthenticated() && isset($_SESSION['isAdmin']) && $_SESSION['isAdmin'] === true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Требовать авторизацию
|
||||
*/
|
||||
protected function requireAuth(): void
|
||||
{
|
||||
if (!$this->isAuthenticated()) {
|
||||
$redirect = urlencode($_SERVER['REQUEST_URI']);
|
||||
$this->redirect("/login?redirect={$redirect}");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Требовать права администратора
|
||||
*/
|
||||
protected function requireAdmin(): void
|
||||
{
|
||||
if (!$this->isAdmin()) {
|
||||
$this->redirect('/login');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить POST данные
|
||||
*/
|
||||
protected function getPost(?string $key = null, $default = null)
|
||||
{
|
||||
if ($key === null) {
|
||||
return $_POST;
|
||||
}
|
||||
return $_POST[$key] ?? $default;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить GET данные
|
||||
*/
|
||||
protected function getQuery(?string $key = null, $default = null)
|
||||
{
|
||||
if ($key === null) {
|
||||
return $_GET;
|
||||
}
|
||||
return $_GET[$key] ?? $default;
|
||||
}
|
||||
|
||||
/**
|
||||
* Установить flash-сообщение
|
||||
*/
|
||||
protected function setFlash(string $type, string $message): void
|
||||
{
|
||||
$_SESSION['flash'][$type] = $message;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить flash-сообщение
|
||||
*/
|
||||
protected function getFlash(string $type): ?string
|
||||
{
|
||||
$message = $_SESSION['flash'][$type] ?? null;
|
||||
unset($_SESSION['flash'][$type]);
|
||||
return $message;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user