Search by

Быстрый безопасный движок представлений для PHP 8.1+: нативный PHP и компилируемый DSL, наследование шаблонов, секции, компоненты и слоты, стеки, контекстное автоэкранирование, sandbox, фильтры, функции, директивы, расширения и кэш скомпилированных шаблонов.

v1.1.0 2026-09-07 05:16 UTC

This package is auto-updated.

Last update: 2026-09-07 05:17:51 UTC


README

🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano

CloudCastle View

CloudCastle View

Packagist Version PHP Version License Downloads Monthly Downloads Dependents Suggesters

Quality Repository Release Issues

PHPStan Psalm PHPMD PHPCS Coverage Infection MSI OpenSSF Scorecard

Быстрый безопасный движок представлений для PHP 8.1+: нативный PHP и компилируемый DSL, наследование шаблонов, секции, компоненты и слоты, стеки, контекстное автоэкранирование, sandbox, фильтры, функции, директивы и кэш скомпилированных шаблонов.

Установка

composer require cloud-castle/view

Требуется PHP 8.1+ и расширение mbstring.

Быстрый старт

<?php

use CloudCastle\View\Factory;

$view = Factory::create([
    'paths' => [__DIR__ . '/templates'],
    'cache' => __DIR__ . '/var/views',
]);

// Регистрация возможностей (по желанию).
$view->addGlobal('appName', 'ACME');
$view->addFunction('asset', static fn (string $p): string => "/assets/{$p}");
$view->addFilter('money', static fn (mixed $v): string => number_format((float) $v, 2, ',', ' '));

echo $view->render('pages.home', ['title' => 'Привет', 'user' => $user]);

Шаблон templates/pages/home.ccv.php (компилируемый DSL):

@extends('layouts.app')

@section('content')
    <h1>{{ $title }}</h1>

    @forelse ($user->orders as $order)
        <p>{{ $loop->iteration }}. {{ $order->number|upper }} — {{ $order->total|money }} ₽</p>
    @empty
        <p>Заказов пока нет.</p>
    @endforelse

    @push('scripts')
        <script src="{{ asset('orders.js') }}"></script>
    @endpush
@endsection

Предпочитаете чистый PHP? Шаблон .php рендерится нативным движком без компиляции — с тем же API секций, стеков и экранирования через $this/$__view.

Возможности

  • Два движка: нативный PHP (Plates-стиль, максимум скорости) и компилируемый DSL (Blade/Twig-стиль) — оба реализуют единый контракт и взаимозаменяемы.
  • Наследование шаблонов: @extends, @section/@yield, @parent, @show, @overwrite/@append, @hasSection/@sectionMissing.
  • Компоненты и слоты, стеки @push/@prepend/@stack/@once.
  • Управляющие директивы: @if/@unless/@isset/@empty/@switch, циклы @foreach с переменной $loop, @forelse, @for, @while.
  • Включения: @include, @includeIf/@includeWhen/@includeUnless.
  • Цепочки фильтров ({{ $x|upper|limit:20 }}) с богатым встроенным набором и пользовательские функции прямо в шаблоне.
  • Безопасность: контекстное автоэкранирование (html/attr/js/css/url) и режим песочницы для недоверенных шаблонов.
  • Производительность: компиляция в PHP + кэш (поверх cloud-castle/cache), исполнение через include дружественно к OPcache; защита загрузчика от path traversal.
  • Расширяемость: расширения, композеры, глобальные значения, пользовательские директивы.

Коротко

Движок представлений, объединяющий сильные стороны Plates (нативный PHP), Blade/Twig (директивы, наследование, компоненты) и Latte (контекстное экранирование) в одном пакете с минимумом зависимостей из экосистемы cloud-castle. По функционалу перекрывает объединение аналогов, лидирует по безопасности и скорости на типовой операции рендеринга.

Сравнение с аналогами

Все таблицы ниже сгенерированы автоматически из честных сравнительных тестов (benchmarks/compare.php) на ОДИНАКОВОЙ операции для всех аналогов, PHP 8.1.34, без Xdebug.

1. Функциональность

Возможность🏆 CloudCastleTwigLatteSmartyPlatesMustachenative¹
Два движка: нативный PHP и компилируемый DSL
Наследование шаблонов (секции/@yield/@parent)
Компоненты и слоты
Стеки (@push/@stack)
Контекстное экранирование (html/js/css/url)
Sandbox-режим
Цепочки фильтров и пользовательские функции
Встроенный перевод (@lang) с экранированием
Плагины с жизненным циклом и хуками рендеринга
Всего🏆 9452311

2. Безопасность и корректность

Свойство🏆 CloudCastleTwigLatteSmartyPlatesMustachenative¹
Автоэкранирование по умолчанию
Контекстное экранирование (js/css/url)
Sandbox с белыми списками
Защита от path traversal
Безопасный пресет песочницы из коробки
Всего🏆 5342010

3. Производительность

Рендер списка из 30 элементов с экранированием, 20 000 раз (минимум из 4).

РешениеВремя (мс)Итог
native¹1 054,7базовый уровень (не библиотека)
🏆 CloudCastle1 711,4быстрейшее среди библиотек
Plates4 416,8аналог
Latte4 688,8аналог
Twig5 065,3аналог
Smarty6 793,8аналог
Mustache6 930,5аналог

4. Потребление памяти

Фактически занятая память 2 000 удержанных результатов рендеринга (изолированный процесс).

РешениеПиковая память (KB)Итог
native¹2 568базовый уровень (не библиотека)
🏆 Plates2 616легчайшее среди библиотек
CloudCastle2 675аналог
Mustache3 005аналог
Twig4 174аналог
Smarty4 415аналог
Latte4 480аналог

¹ Базовый уровень (нативные вызовы без полноты решения) показан для контекста и не претендует на победу среди библиотек.

Плюсы, минусы и когда применять

Сильные стороны:

  • Функционал = объединение аналогов — нативный PHP и DSL, наследование, компоненты, стеки, $loop, фильтры и функции; ни один аналог не покрывает всё это сразу.
  • Безопасность — контекстное экранирование (js/css/url, не только html) и sandbox; по этой оси пакет лидирует среди сравниваемых.
  • Производительность — компиляция + OPcache-friendly include; быстрый рендеринг.
  • Минимум зависимостей — только cloud-castle/* и PSR-пакеты.

Слабые стороны (честно):

  • Моложе и менее распространён, чем Twig/Blade/Smarty — меньше готовых интеграций, примеров и вопросов на форумах. Это единственный реальный минус.
  • Для проектов, уже завязанных на экосистему Symfony (Twig) или Laravel (Blade), нативная интеграция родного движка фреймворка может быть удобнее.

Когда применять. Когда нужен безопасный, быстрый и богатый по возможностям движок представлений без привязки к фреймворку — в собственных микрофреймворках, доменных сервисах, генераторах писем и отчётов, при рендеринге недоверенных шаблонов (sandbox). Если проект целиком на Symfony или Laravel — их штатные Twig/Blade будут интегрированы теснее.

Разработка

composer install
composer check    # линтеры + статический анализ + тесты
composer fix      # автоисправления (Rector, PHP CS Fixer, PHPCBF)
composer ci       # полный CI-пайплайн локально
composer docs:build   # пересобрать сравнительные таблицы из честных тестов

Полный список команд с описаниями: composer run-script --list.

Документация

Лицензия

MIT © CloudCastle (alex-4-17@yandex.ru)

🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano