PHPackages                             scafera/frontend - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Templating &amp; Views](/categories/templating)
4. /
5. scafera/frontend

ActiveSymfony-bundle[Templating &amp; Views](/categories/templating)

scafera/frontend
================

Template rendering for the Scafera framework

v1.0.2(1mo ago)0171MITPHPPHP &gt;=8.4

Since Apr 13Pushed 1mo agoCompare

[ Source](https://github.com/scafera/frontend)[ Packagist](https://packagist.org/packages/scafera/frontend)[ Docs](https://github.com/scafera/frontend)[ RSS](/packages/scafera-frontend/feed)WikiDiscussions main Synced 1w ago

READMEChangelog (3)Dependencies (3)Versions (4)Used By (1)

scafera/frontend
================

[](#scaferafrontend)

Template rendering for the Scafera framework. Wraps a template engine internally — your code never touches it directly.

> **Provides:** Template rendering for Scafera — implements kernel's `ViewInterface` with a Twig-backed `render(string $template, array $context): string` that returns plain strings. Templates live in `templates/` at the project root. Controllers inject `ViewInterface`, never Twig directly.
>
> **Depends on:** A Scafera host project with a `templates/` directory at its root. Most users install `scafera/layered-web` (the meta-package) rather than requiring this directly.
>
> **Extension points:** None of its own — the package is a pure implementation of kernel's `ViewInterface`. New templates are picked up by dropping `.html.twig` files into `templates/`. Twig extensions for userland are explicitly not supported (ADR-030) — inject services and call their methods from controllers instead.
>
> **Not responsible for:** Form rendering (owned by `scafera/form`) · asset management (owned by `scafera/asset`) · Twig extensions for userland (ADR-030) · view composers / shared template data (inject services explicitly in controllers) · layout helpers (use Twig's native `{% extends %}` / `{% block %}`) · direct use of `Twig\*` types in userland (blocked by `TwigLeakageValidator`).

This is a **capability package**. It adds optional template rendering to a Scafera project. It does not define folder structure or architectural rules — those belong to architecture packages.

Requirements
------------

[](#requirements)

- PHP &gt;= 8.4
- `scafera/kernel` ^1.0

Installation
------------

[](#installation)

```
composer require scafera/frontend
```

> Most users won't install this directly. Instead, install a meta-package like `scafera/layered-web`, which pulls in the frontend along with architecture conventions.

How it works
------------

[](#how-it-works)

### The View contract

[](#the-view-contract)

The kernel defines `ViewInterface` — the only type your code depends on:

```
interface ViewInterface
{
    public function render(string $template, array $context = []): string;
}
```

This package provides the Twig-backed implementation. The bundle registers it automatically when installed — no configuration needed.

### Usage in controllers

[](#usage-in-controllers)

Inject `ViewInterface` via constructor. The controller decides how to use the rendered string:

```
use Scafera\Kernel\Contract\ViewInterface;
use Scafera\Kernel\Http\Response;
use Scafera\Kernel\Http\Route;

#[Route('/orders/{id}', methods: 'GET')]
final class Show
{
    public function __construct(
        private readonly ViewInterface $view,
        private readonly OrderService $orders,
    ) {}

    public function __invoke(Request $request): Response
    {
        $order = $this->orders->find($request->routeParam('id'));

        return new Response($this->view->render('order/show.html.twig', [
            'order' => $order,
        ]));
    }
}
```

### Template location

[](#template-location)

Templates live in `templates/` at your project root. The bundle configures this path automatically.

### Boundary enforcement

[](#boundary-enforcement)

This package includes a `TwigLeakageValidator` that scans your `src/` directory for direct `Twig\*` imports. Violations are reported by `scafera validate`:

```
Package checks:
  ✗ No Twig imports in userland FAILED
    - src/Service/PdfGenerator.php: imports Twig types directly — use Scafera\Kernel\Contract\ViewInterface instead

```

Public API
----------

[](#public-api)

TypeClassPurposeContract`Scafera\Kernel\Contract\ViewInterface`Template rendering interface (defined in kernel)Implementation`Scafera\Frontend\View`Twig-backed implementation (internal)User code should type-hint `ViewInterface`, never `View` directly.

License
-------

[](#license)

MIT

###  Health Score

41

—

FairBetter than 87% of packages

Maintenance89

Actively maintained with recent releases

Popularity6

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity53

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~1 days

Total

3

Last Release

54d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/e9233f415f42755f68dc3006e2853b76c34de54b04c9535202b70aa147790e6a?d=identicon)[samaphp](/maintainers/samaphp)

---

Top Contributors

[![samaphp](https://avatars.githubusercontent.com/u/531627?v=4)](https://github.com/samaphp "samaphp (16 commits)")

---

Tags

phptemplatesfrontendscafera

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/scafera-frontend/health.svg)

```
[![Health](https://phpackages.com/badges/scafera-frontend/health.svg)](https://phpackages.com/packages/scafera-frontend)
```

###  Alternatives

[endroid/qr-code-bundle

Endroid QR Code Bundle

32511.1M23](/packages/endroid-qr-code-bundle)[symfony/ux-icons

Renders local and remote SVG icons in your Twig templates.

566.8M117](/packages/symfony-ux-icons)[ehyiah/ux-quill

Symfony UX Bundle to use Quill JS wysiwyg text editor with full and easy customisation

6183.7k3](/packages/ehyiah-ux-quill)[symfony/ux-toolkit

A tool to easily create a design system in your Symfony app with customizable, well-crafted Twig components

1482.8k1](/packages/symfony-ux-toolkit)[devanych/view-renderer

Simple PHP View Renderer

153.3k1](/packages/devanych-view-renderer)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
