Rudra Framework
✅Rudra использует простой, но гибкий механизм рендеринга через функцию render():
render("layout", data());✅Шаблоны ищутся в папке, указанной в View::setup() (обычно в containerInit() базового контроллера контейнера):
View::setup(dirname(__DIR__) . "/Web/UI/tmpl", "Web_");✅Шаблон web/layout будет загружен как Web/UI/tmpl/web/layout.php.
composer require "twig/twig:^3.0"Создаем фабрику
<?php
namespace App\Containers\Web\Factory;
use Rudra\View\View;
use Rudra\View\TwigView;
use Rudra\Container\Interfaces\FactoryInterface;
class TwigFactory implements FactoryInterface
{
public function create(): TwigView
{
$view = new TwigView();
$view->setup(
viewPath: dirname(dirname(__DIR__)) . '/Web/UI/tmpl',
prefix: '',
extension: 'twig'
);
return $view;
}
}
Настраиваем сервис
<?php
use Rudra\View\View;
use Rudra\View\TwigView;
use App\Containers\Web\Factory\TwigFactory;
return [
'contracts' => [
],
'services' => [
// View::class => function () {
// $view = new TwigView();
// $view->setup(
// viewPath: dirname(__DIR__) . '/Web/UI/tmpl',
// prefix: '',
// extension: 'twig'
// );
// return $view;
// }
// View::class => fn() => (new TwigFactory())->create(),
View::class => TwigFactory::class,
]
];Функция | Назначение |
|---|---|
data([...]) | Устанавливает глобальные данные для шаблона (например, title, menus). |
json($data) | Отправляет JSON-ответ с правильным Content-Type. |
redirect($url) | Выполняет HTTP-редирект (код 302). |
abort($code) | Возвращает HTTP-ошибку (например, abort(404)). |
Все функции доступны глобально в контроллерах.
Rudra включает встроенную систему событий на основе паттерна Observer и Listener.
Тип | Использование | Регистрация |
|---|---|---|
Listener | Однократная реакция на событие | Dispatcher::addListener('name', [Handler::class, 'method']) |
Observer | Наблюдение за событием с контекстом | Dispatcher::attachObserver('name', [Handler::class, 'method'], $context) |
Пример вызова:
Dispatcher::dispatch('message', __CLASS__);
Dispatcher::notify('one');Регистрация обычно происходит в App\Ship\ShipController::eventRegistration().
✅Rudra поддерживает простое, но эффективное кэширование через функцию cache().
// Получить или создать
$content = cache(['mainpage']) ?? view(["index", 'mainpage']);
// Сохранить с TTL (в секундах)
cache(['user_profile', $userId], $data, ttl: 3600);По умолчанию используется файловое кэширование (в папке Ship/Cache), но можно подключить Redis или Memcached через DI.
php rudra cache:clearОчищает весь кэш приложения.
Также можно управлять кэшем программно через Rudra::get('cache').
✅Rudra позволяет кэшировать любые результаты, включая запросы к БД и последующую обработку.
// 1. Получаем все активные категории из БД (запрос кэшируется)
$categories = $category->cache(['getAllActive_categories']);
// 2. Строим древовидную структуру — и тоже кэшируем результат
$categoryMenu = $category->cache([
'buildTree_categoryMenu',
[array_filter($categories, fn($c) => $c['id'] != 1), 1]
]);
- Первый вызов cache(['ключ']) сохраняет результат метода $category->getAllActive().
- Второй — кэширует результат $category->buildTree(...) с конкретными аргументами.
- При повторном запросе БД не трогается — данные берутся из кэша.
Если вызвать $model->cache($key), Rudra:
Это означает: имя ключа должно соответствовать имени метода модели.