---
title: "Events"
manual: "Handlebars"
version: "main"
permalink: "https://docs.typo3.org/permalink/cpsit/typo3-handlebars:events@main"
source: "DeveloperCorner/Events.rst"
rendered: "2026-09-29T09:05:57+00:00"
---

# Events {#events}

The extension dispatches three PSR-14 events during the rendering pipeline.

-   [BeforeTemplateCompilationEvent](https://docs.typo3.org/permalink/cpsit/typo3-handlebars:beforetemplatecompilationevent@main)
-   [BeforeRenderingEvent](https://docs.typo3.org/permalink/cpsit/typo3-handlebars:beforerenderingevent@main)
-   [AfterRenderingEvent](https://docs.typo3.org/permalink/cpsit/typo3-handlebars:afterrenderingevent@main)

## BeforeTemplateCompilationEvent {#before-template-compilation-event}

Dispatched immediately before a template is compiled. The event provides
read-only access to the rendering context and the renderer. Use it to
inspect the context (e.g., to log which template is about to be rendered)
or to trigger additional rendering via the renderer:

**EXT:my_extension/Classes/EventListener/BeforeTemplateCompilationListener.php**

```php
namespace Vendor\Extension\EventListener;

use CPSIT\Typo3Handlebars\Event\BeforeTemplateCompilationEvent;

final readonly class BeforeTemplateCompilationListener
{
    public function __invoke(BeforeTemplateCompilationEvent $event): void
    {
        $context = $event->getContext();   // RenderingContext
        $renderer = $event->getRenderer(); // Renderer
    }
}
```

## BeforeRenderingEvent {#before-rendering-event}

Dispatched after variables have been resolved and merged, immediately before
the compiled template is executed. The full variable set can be read and
modified:

**EXT:my_extension/Classes/EventListener/BeforeRenderingListener.php**

```php
namespace Vendor\Extension\EventListener;

use CPSIT\Typo3Handlebars\Event\BeforeRenderingEvent;

final readonly class BeforeRenderingListener
{
    public function __invoke(BeforeRenderingEvent $event): void
    {
        // Add a variable
        $event->addVariable('timestamp', time());

        // Replace the entire variable set
        $variables = $event->getVariables();
        $variables['title'] = strtoupper($variables['title'] ?? '');
        $event->setVariables($variables);

        // Remove a variable
        $event->removeVariable('internalFlag');
    }
}
```

Available methods:

-   `getVariables()` / `setVariables(array $variables)` — get or
    replace the full variable set
-   `addVariable(string $name, mixed $value)` — add or overwrite a single
    variable
-   `removeVariable(string $name)` — remove a variable by name
-   `getContext()` — the `RenderingContext` (read-only)
-   `getRenderer()` — the `Renderer` (read-only)

## AfterRenderingEvent {#after-rendering-event}

Dispatched after the template has been fully rendered. The rendered HTML
string can be read and replaced:

**EXT:my_extension/Classes/EventListener/AfterRenderingListener.php**

```php
namespace Vendor\Extension\EventListener;

use CPSIT\Typo3Handlebars\Event\AfterRenderingEvent;

final readonly class AfterRenderingListener
{
    public function __invoke(AfterRenderingEvent $event): void
    {
        $content = $event->getContent();
        $event->setContent(trim($content));
    }
}
```

Available methods:

-   `getContent()` / `setContent(string $content)` — get or replace
    the rendered output
-   `getContext()` — the `RenderingContext` (read-only)
-   `getRenderer()` — the `Renderer` (read-only)

> [!NOTE]
> **See also**
>
> -   [BeforeTemplateCompilationEvent](https://github.com/CPS-IT/handlebars/blob/main/Classes/Event/BeforeTemplateCompilationEvent.php)
> -   [BeforeRenderingEvent](https://github.com/CPS-IT/handlebars/blob/main/Classes/Event/BeforeRenderingEvent.php)
> -   [AfterRenderingEvent](https://github.com/CPS-IT/handlebars/blob/main/Classes/Event/AfterRenderingEvent.php)
