Fix LESS import error and refactor project structure

This commit is contained in:
kirill.khorkov
2026-01-03 18:59:56 +03:00
parent 1bb0fc02e6
commit 4a8d4f8c3f
201 changed files with 891 additions and 14311 deletions

View File

@@ -2,24 +2,15 @@
namespace App\Core;
/**
* View - класс для рендеринга представлений
*/
class View
{
private static string $viewsPath = '';
/**
* Установить путь к директории представлений
*/
public static function setViewsPath(string $path): void
{
self::$viewsPath = rtrim($path, '/');
}
/**
* Получить путь к директории представлений
*/
public static function getViewsPath(): string
{
if (empty(self::$viewsPath)) {
@@ -28,9 +19,6 @@ class View
return self::$viewsPath;
}
/**
* Отрендерить представление
*/
public static function render(string $view, array $data = [], ?string $layout = 'main'): string
{
$viewPath = self::getViewsPath() . '/' . str_replace('.', '/', $view) . '.php';
@@ -39,15 +27,12 @@ class View
throw new \Exception("Представление не найдено: {$viewPath}");
}
// Извлекаем данные в переменные
extract($data);
// Буферизируем вывод контента
ob_start();
require $viewPath;
$content = ob_get_clean();
// Если есть layout, оборачиваем контент
if ($layout !== null) {
$layoutPath = self::getViewsPath() . '/layouts/' . $layout . '.php';
@@ -63,9 +48,6 @@ class View
return $content;
}
/**
* Отрендерить partial (часть шаблона)
*/
public static function partial(string $partial, array $data = []): string
{
$partialPath = self::getViewsPath() . '/partials/' . $partial . '.php';
@@ -81,49 +63,31 @@ class View
return ob_get_clean();
}
/**
* Экранирование HTML
*/
public static function escape(string $value): string
{
return htmlspecialchars($value, ENT_QUOTES, 'UTF-8');
}
/**
* Сокращенный алиас для escape
*/
public static function e(string $value): string
{
return self::escape($value);
}
/**
* Форматирование цены
*/
public static function formatPrice($price): string
{
return number_format((float)$price, 0, '', ' ') . ' ₽';
}
/**
* Форматирование даты
*/
public static function formatDate(string $date, string $format = 'd.m.Y'): string
{
return date($format, strtotime($date));
}
/**
* Форматирование даты и времени
*/
public static function formatDateTime(string $date, string $format = 'd.m.Y H:i'): string
{
return date($format, strtotime($date));
}
/**
* Получить flash-сообщения
*/
public static function getFlashMessages(): array
{
$messages = $_SESSION['flash'] ?? [];
@@ -131,25 +95,16 @@ class View
return $messages;
}
/**
* Проверить, авторизован ли пользователь
*/
public static function isAuthenticated(): bool
{
return isset($_SESSION['isLoggedIn']) && $_SESSION['isLoggedIn'] === true;
}
/**
* Проверить, является ли пользователь администратором
*/
public static function isAdmin(): bool
{
return self::isAuthenticated() && isset($_SESSION['isAdmin']) && $_SESSION['isAdmin'] === true;
}
/**
* Получить данные текущего пользователя
*/
public static function currentUser(): ?array
{
if (!self::isAuthenticated()) {
@@ -165,20 +120,13 @@ class View
];
}
/**
* Генерация URL
*/
public static function url(string $path): string
{
return '/' . ltrim($path, '/');
}
/**
* Генерация URL для ассетов
*/
public static function asset(string $path): string
{
return '/assets/' . ltrim($path, '/');
}
}