Note
This repository has been migrated to Codeberg, please see: https://codeberg.org/bluice/mitemplate
MiTemplate é um mecanismo de templates leve e moderno escrito em PHP, focado em simplicidade, performance e controle explícito por código.
Ele permite separar HTML da lógica da aplicação sem depender de parsers complexos, ASTs, engines pesadas ou fases de compilação.
O template é interpretado de forma incremental e determinística, com controle total da renderização pelo código PHP.
MiTemplate é baseado no MGTemplate.
- Interpolação simples de variáveis:
{{title}} - Suporte a objetos e arrays:
{{user.name}} - Modificadores encadeáveis:
{{title|upper|trim}} - Seções reutilizáveis com repetição controlada por código
- Seções aninhadas com resolução tardia (lazy sections)
- Limpeza automática de seções e variáveis não utilizadas
- Sem uso de Reflection insegura (
setAccessible) - Compatível com PHP 8.4 ou superior
- Ideal para APIs, sites, CLIs e projetos embarcados
composer require mugomes/mitemplateCopie o arquivo MiTemplate.php para o seu projeto e faça a inclusão.
<!DOCTYPE html>
<html>
<head>
<title>{{title}}</title>
</head>
<body>
<h1>{{title|upper}}</h1>
[[item]]
<div>
<strong>{{user.name}}</strong><br>
<small>{{info}}</small>
</div>
[[/item]]
</body>
</html><?php
use MiTemplate\MiTemplate;
$tpl = new MiTemplate('template.html');
$tpl->var('title', 'MiTemplate Example');
for ($i = 0; $i < 5; $i++) {
$tpl->var('user', (object)[
'name' => 'Usuário ' . $i,
]);
$tpl->var('info', 'Informação ' . $i);
$tpl->section('item');
}
echo $tpl->render();Seções são definidos diretamente no HTML:
[[item]]
<p>{{user.name}}</p>
[[/item]]E ativados no código sempre que necessário:
$tpl->section('item');Cada chamada adiciona uma nova instância renderizada da seção.
Caso precise trabalhar com seções em loop é necessário ativá-lo:
for ($i = 0; $i < 5; $i++) {
$tpl->var('i', $i);
$tpl->section('item', true);
}É possível chamar seções filhos antes das seções pais:
for ($i = 0; $i < 3; $i++) {
$tpl->var('itemNome', $i);
$tpl->section('item');
}
$tpl->section('conteudo');O MiTemplate resolve toda a hierarquia automaticamente durante o render().
{{title}}$tpl->var('title', 'Exemplo');
echo $tpl->getVar('title');if ($tpl->varExists('title')) {
$tpl->var('title', 'Novo título');
}{{user.name}}
{{user.email}}$tpl->var('user', (object)[
'name' => 'Murilo',
'email' => 'murilo@email.com'
]);- Acesso case-insensitive
- Ignora
_e diferenças de nomenclatura - Suporta getters (
getName())
{{menuTopo}}$tpl->includeFile('menuTopo', 'partials/menu.html');Modificadores podem ser encadeados usando |.
| Modificador | Descrição |
|---|---|
upper |
Converte para maiúsculas |
lower |
Converte para minúsculas |
trim |
Remove espaços |
Exemplo:
{{title|upper|trim}}Durante o render(), o MiTemplate remove automaticamente:
-
Seções não utilizadas:
[[section]] ... [[/section]] -
Tags órfãs:
[[/section]] -
Variáveis não resolvidas:
{{variavel}}
Isso garante HTML limpo e válido, mesmo quando as seções não são ativadas.
Murilo Gomes Julio
📺 https://youtube.com/@mugomesoficial
- GitHub Sponsors: https://github.com/sponsors/mugomes
- Apoie o projeto: https://www.bluice.com.br/apoie/
The MiTemplate is provided under:
SPDX-License-Identifier: LGPL-2.1-only
Beign under the terms of the GNU Lesser General Public License version 2.1 only.
All contributions to the MiTemplate are subject to this license.