Helper Smarty
1Apresentação
Este helper é útil para processar templates Smarty dentro de uma aplicação, para gerar fluxos (texto, HTML, XML ou outro) fora do processamento de visão do framework.
Assim como a visão Smarty, este helper é compatível com as versões 4 e 5 da biblioteca Smarty. (Isso não acontecia antes: o helper era limitado ao Smarty 4.)
Ele é instanciado através do componente de injeção de dependências.
Seu método render() recebe como parâmetros o caminho para o template Smarty a ser usado (caminho absoluto ou caminho relativo dentro do diretório templates/ do projeto), e um array associativo opcional contendo as variáveis que devem ficar acessíveis no template.
Seu método eval() é usado de forma similar, mas espera que o primeiro parâmetro seja o conteúdo de um template Smarty, em vez de um caminho para um arquivo.
Seu método templateExists() recebe como parâmetro o caminho para um template, e retorna um booleano indicando se o template existe ou não.
2Uso
Exemplo simples:
// definição do template
$template = 'path/to/template.tpl';
// dados do template
$data = [
'var1' => 'value1',
'var2' => 'value2',
];
// instanciação através do loader
$html = $this->_loader['\Temma\Utils\Smarty']->render($template, $data);
Exemplo avançado:
use \Temma\Exceptions\IO as TµIOException;
// dados do template
$data = [
'name' => 'Luke',
'mentor' => 'Yoda',
];
try {
// caminho do arquivo do template
$path = 'path/to/template.tpl';
// processamento do template
$html = $this->_loader['\Temma\Utils\Smarty']->render($path, $data);
} catch (TµIOException $e) {
// variável contendo código Smarty
$smarty = "Hi {$name}, disciple of {$mentor}";
// processamento do template
$html = $this->_loader['\Temma\Utils\Smarty']->eval($smarty, $data);
}
// verifica a existência de um arquivo de template
if ($this->_loader['Temma\Utils\Smarty']->templateExists($path)) {
print("O template existe.");
}
3Escape HTML
Assim como na visão Smarty, o auto-escape HTML das variáveis está habilitado por padrão: as variáveis renderizadas nos templates processados pelo helper são automaticamente escapadas (os caracteres especiais <, >, &, etc. são convertidos em entidades HTML). Isso não acontecia antes.
Esse comportamento é definido globalmente através da seção de configuração x-smarty (chave autoEscape); veja a seção de escape da visão Smarty para mais detalhes.
Os métodos render() e eval() também aceitam um terceiro parâmetro opcional $autoEscape para forçar o comportamento em uma única chamada:
- true: força o escape para essa chamada;
- false: desabilita o escape para essa chamada;
- null (valor padrão): utiliza a configuração definida.
// renderização com a configuração definida (escape habilitado por padrão)
$html = $this->_loader['\Temma\Utils\Smarty']->render($template, $data);
// renderização sem escape, apenas para essa chamada
$raw = $this->_loader['\Temma\Utils\Smarty']->render($template, $data, false);
// o array de dados é opcional
$html = $this->_loader['\Temma\Utils\Smarty']->render($template);
4Plugins
O helper registra exatamente os mesmos plugins Smarty que a visão: os do diretório lib/smarty-plugins do seu projeto, os dos diretórios listados na configuração x-smarty (chave pluginsDir), além dos plugins do temma-ui, caso esteja instalado.
Os modificadores e funções personalizados que você usa em seus templates ficam, portanto, também disponíveis nos templates processados pelo helper.