Очень безопасные и интуитивно понятные шаблоны для PHP

Более 27% веб-сайтов
имеют критические уязвимости

Наиболее распространенной критической уязвимостью веб-сайтов является межсайтовый скриптинг (XSS). Она позволяет злоумышленнику вставить вредоносный скрипт в страницу, которая выполняется в браузере ничего не подозревающего пользователя. Он может изменить страницу, получить конфиденциальную информацию или даже украсть личность пользователя.

Системы шаблонизации не способны защитить от XSS. Latte – единственная система с эффективной защитой, благодаря контекстно-зависимому экранированию.

Каждый, кто хочет иметь хорошо защищенный сайт, использует Latte.

Викторина: Можете ли вы защититься от XSS-уязвимости?

Источник: Отчет о веб-уязвимостях Acunetix

Пример автоматического экранирования переменной $text в нескольких различных контекстах (вы можете редактировать верхний шаблон):

{var $text = "O'Neill"}
- в тексте: <span>{$text}</span>
- в атрибуте: <span title='{$text}'></span>
- в атрибуте без кавычек: <span title={$text}></span>
- в JavaScript: <script>var = {$text}</script>
- в тексте: <span>О'Нил</span>
- в атрибуте: <span title='O&apos;Neill'></span>
- в атрибуте без кавычек: <span title="O&apos;Neill"></span>
- в JavaScript: <script>var = "O'Neill"</script>

Язык, который вы хорошо знаете

Мы не шутим, вы уже знаете язык Latte. Вы уже знаете, как писать на нем выражения. На самом деле, они написаны точно так же, как и в PHP. Поэтому вам не нужно думать о том, как написать что-то на Latte. Вам не нужно искать документацию. Вам не нужно учить другой язык. Вы просто пишете, как в PHP. Подробнее о синтаксисе Latte

Цикл

<ul>
    {foreach $users as $user}
        <li>{$user->name}</li>
    {/foreach}
</ul>

Условие

{if $post->status === Status::Published}
    Read post
{elseif count($posts) > 0}
    See other posts
{/if}

Выражения

{$product?->getDiscount()}

{$foo[0] + strlen($bar[Bar::Const])}

{array_filter($nums, fn($n) => $n < 100)}

Latte против Веточки

Latte основан на PHP, в то время как Twig основан на Python. Дизайнеру в Latte не нужно постоянно переключаться между двумя разными конвенциями. Например, между for person in people в шаблонах и foreach $people as $person в PHP. Ему даже не нужно думать о том, где использовать {% %}, а где {{ }}, потому что в Latte есть один разделитель {...}.

Попробуйте использовать инструмент Twig to Latte.

<ul>
    {foreach $foo->items as $item}
        <li>{$item->name}</li>
    {/foreach}
</ul>
<ul>
    {% for item in foo.items %}
        <li>{{ item.name }}</li>
    {% endfor %}
</ul>

Режим экономии клавиатуры, который заставит вас поволноваться

Пользователи любят эту функцию. Мы называем ее n:attributes. Любые парные теги, такие как {if} ... {/if}.. {if} ... {/if} обертывающие HTML-элемент, могут быть записаны как его атрибут n:if. Это очень эффективная нотация. Атрибуты также могут иметь префиксы inner- и tag-, тогда поведение применяется к внутренней части элемента соответственно открывающему и завершающему HTML-тегам. Подробнее о n-атрибутах

Использование n:атрибутов:

<ul n:if="count($menu) > 1" class="menu">
    <li n:foreach="$menu as $item">
        <a n:tag-if="$item->href" href="{$item->href}">
            {$item->caption}
        </a>
    </li>
</ul>

И то же самое без них:

{if count($menu) > 1}
    <ul class="menu">
        {foreach $menu as $item}
            <li>
                {if $item->href}<a href="{$item->href}">{/if}
                    {$item->caption}
                {if $item->href}</a>{/if}
            </li>
        {/foreach}
    </ul>
{/if}

Latte Pampers Developers

Редактирование

Latte имеет встроенную поддержку в NetBeans и отличный плагин для PhpStorm, который предлагает теги, фильтры и PHP-код.

Отладка

Будьте в курсе. Плагин для Tracy":/ru/develop#toc-debugging-and-tracy информирует вас на каждой странице о том, какие шаблоны и какие переменные отображаются.

Шаблоны нового поколения

Latte – это система шаблонов нового поколения – она понимает HTML. Там, где другие системы видят только набор символов, Latte видит HTML-элементы. Именно поэтому у нее есть такие удивительные возможности, как контекстно-зависимое экранирование и n:attributes.

Как Blade, Twig и другие системы видят шаблон

░░░░░░░░░░░░░░░
░░░░░░
    ░░░░░░
        ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
        ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░@yield ('description')░
    ░░░░░░░
    ░░░░░░
        ░░░░░░░░░░░░░░░░░░░░░░░
            @foreach ($navigation as $item)
                ░░░░░░░░░░░░{{$item->link}}░{{$item->title}}░░░░░░░
            @endforeach
        ░░░░░

        ░░░░░░░░
            ░░░░░░░░░░░░{{ $appName }}░
        ░░░░░░░░░
    ░░░░░░░
░░░░░░░

Как Latte видит шаблон

<!DOCTYPE html>
<html>
    <head>
        <title>It's all about context</title>
        <meta name="description" content="{include description}">
    </head>
    <body>
        <ul class="navigation">
            {foreach  $navigation as $item}
                <li><a href="{$item->link}">{$item->title}</a></li>
            {/foreach}
        </ul>

        <script>
            var appName = {$appName};
        </script>
    </body>
</html>

Компоновка и наследование

Сложные механизмы повторного использования и наследования шаблонов повышают вашу производительность, поскольку каждый шаблон содержит только уникальное содержимое, а повторяющиеся элементы и структуры используются повторно.

Песочница

У Latte есть бронированный бункер прямо под капотом. Он называется режимом песочницы и изолирует шаблоны от ненадежных источников, например, редактируемых самими пользователями. Он дает им ограниченный доступ к тегам, фильтрам, функциям, методам и т.д. Как это работает?

Это действительно быстро

Latte компилирует шаблон до оптимального PHP-кода одновременно с вашей работой. Таким образом, это так же быстро, как если бы вы создавали исключительно PHP. Скомпилированный PHP-код понятен и легко отлаживается. Шаблон автоматически перекомпилируется каждый раз, когда мы изменяем исходный файл.

Более 15 лет

Мы разрабатываем Latte уже более 15 лет – и не останавливаемся на достигнутом! Поэтому библиотеки, которые мы предоставляем, являются очень зрелыми, стабильными и широко используемыми. Им доверяют многие мировые корпорации, и многие значимые веб-сайты полагаются на нас. Кто использует и доверяет Latte?

Отличная документация

Читатели хвалят документацию за ясность и полноту. Желаем вам приятного чтения.

Открытый исходный код

Latte имеет открытый исходный код и совершенно бесплатен для использования.