cloud-castle / view
Быстрый безопасный движок представлений для PHP 8.1+: нативный PHP и компилируемый DSL, наследование шаблонов, секции, компоненты и слоты, стеки, контекстное автоэкранирование, sandbox, фильтры, функции, директивы, расширения и кэш скомпилированных шаблонов.
Package info
pkg:composer/cloud-castle/view
Requires
- php: >=8.1
- ext-mbstring: *
- cloud-castle/cache: >=1.0
- cloud-castle/file-system: *
- cloud-castle/support: >=1.0
- psr/simple-cache: ^3.0
Requires (Dev)
- deptrac/deptrac: ^3.0 || ^4.0
- ergebnis/composer-normalize: ^2.45
- friendsofphp/php-cs-fixer: ^3.75
- icanhazstring/composer-unused: ^0.9
- infection/infection: ^0.29 || ^0.33
- latte/latte: ^3.0
- league/plates: ^3.5
- mustache/mustache: ^2.14 || ^3.0
- php-parallel-lint/php-parallel-lint: ^1.4
- phpmd/phpmd: ^2.15
- phpstan/extension-installer: ^1.4
- phpstan/phpstan: ^1.12 || ^2.1
- phpstan/phpstan-deprecation-rules: ^1.2 || ^2.0
- phpstan/phpstan-phpunit: ^1.4 || ^2.0
- phpstan/phpstan-strict-rules: ^1.6 || ^2.0
- phpunit/phpunit: ^10.5 || ^11.5
- psalm/plugin-phpunit: ^0.19 || ^0.20
- rector/rector: ^1.2 || ^2.0
- roave/security-advisories: dev-latest
- smarty/smarty: ^4.3 || ^5.0
- squizlabs/php_codesniffer: ^3.12 || ^4.0
- twig/twig: ^3.0
- vimeo/psalm: ^6.0
Suggests
- cloud-castle/collection: Fluent-обработка коллекций, передаваемых в шаблоны
- cloud-castle/config: Загрузка конфигурации движка из файлов (json/yaml/neon/xml)
- cloud-castle/di: Автоматический резолвинг классовых компонентов и расширений через PSR-11 контейнер
- cloud-castle/event: События жизненного цикла рендеринга (before/after render, view composers)
- cloud-castle/inflector: Фильтры склонений и плюрализации в шаблонах (pluralizeByCount, decline)
Provides
None
Conflicts
None
Replaces
None
This package is auto-updated.
Last update: 2026-09-07 05:17:51 UTC
README
🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano
CloudCastle View
Быстрый безопасный движок представлений для 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. Функциональность
| Возможность | 🏆 CloudCastle | Twig | Latte | Smarty | Plates | Mustache | native¹ |
|---|---|---|---|---|---|---|---|
| Два движка: нативный PHP и компилируемый DSL | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ |
| Наследование шаблонов (секции/@yield/@parent) | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ |
| Компоненты и слоты | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Стеки (@push/@stack) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Контекстное экранирование (html/js/css/url) | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ |
| Sandbox-режим | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Цепочки фильтров и пользовательские функции | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ |
| Встроенный перевод (@lang) с экранированием | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Плагины с жизненным циклом и хуками рендеринга | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Всего | 🏆 9 | 4 | 5 | 2 | 3 | 1 | 1 |
2. Безопасность и корректность
| Свойство | 🏆 CloudCastle | Twig | Latte | Smarty | Plates | Mustache | native¹ |
|---|---|---|---|---|---|---|---|
| Автоэкранирование по умолчанию | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ |
| Контекстное экранирование (js/css/url) | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Sandbox с белыми списками | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Защита от path traversal | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
| Безопасный пресет песочницы из коробки | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Всего | 🏆 5 | 3 | 4 | 2 | 0 | 1 | 0 |
3. Производительность
Рендер списка из 30 элементов с экранированием, 20 000 раз (минимум из 4).
| Решение | Время (мс) | Итог |
|---|---|---|
| native¹ | 1 054,7 | базовый уровень (не библиотека) |
| 🏆 CloudCastle | 1 711,4 | быстрейшее среди библиотек |
| Plates | 4 416,8 | аналог |
| Latte | 4 688,8 | аналог |
| Twig | 5 065,3 | аналог |
| Smarty | 6 793,8 | аналог |
| Mustache | 6 930,5 | аналог |
4. Потребление памяти
Фактически занятая память 2 000 удержанных результатов рендеринга (изолированный процесс).
| Решение | Пиковая память (KB) | Итог |
|---|---|---|
| native¹ | 2 568 | базовый уровень (не библиотека) |
| 🏆 Plates | 2 616 | легчайшее среди библиотек |
| CloudCastle | 2 675 | аналог |
| Mustache | 3 005 | аналог |
| Twig | 4 174 | аналог |
| Smarty | 4 415 | аналог |
| Latte | 4 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.
Документация
- Wiki (возможности, диаграммы, сравнения): wiki/docs/ru/Home.md
- Репозиторий: https://gitverse.ru/cloud-castle/view
- История изменений: CHANGELOG.md · Обновление: UPGRADING.md
- Как внести вклад: CONTRIBUTING.md · Управление: GOVERNANCE.md
- Кодекс поведения: CODE_OF_CONDUCT.md · Безопасность: SECURITY.md
Лицензия
MIT © CloudCastle (alex-4-17@yandex.ru)
🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano