Files
web_work/app/Core/Controller.php
kirill.khorkov d2c15ec37f [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
2026-01-03 11:48:14 +03:00

149 lines
3.8 KiB
PHP

<?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;
}
}