Звучит заманчиво. В дистрибутиве есть каталог test, но это модульные тесты (PHPUnit) — не совсем то, что мне хотелось погонять. А я хочу заглядывать в документацию по twig, копировать оттуда примеры шаблонов в файл и сразу же смотреть что получается.
В итоге настроил под себя апачевские хандлеры на расширения
.md чтобы комфортно читать доки и
.tpl чтобы тутже оформлять и запускать шаблон
Для шаблонов могут понадобиться данные. Я сделал папку /examples/data/ где ищутся файлы с такими же именами как шаблон, если найдено - инклудится, а нет - значит нет.
.htaccess
Action markdown /twig/mdhandler.php
AddHandler markdown .md .markdown
Action twig /twig/tplhandler.php
AddHandler twig .tpl
Про Markdown handler я уже писал здесь: http://pyha.ru/forum/topic/4466.msg95803
Для собственного удобства сделал, что можно не только смотреть готовый html, но и исходники как простой текст
_http://mysite/twig/doc/01-Introduction.markdown
_http://mysite/twig/doc/01-Introduction.markdown?source
_http://mysite/twig/examples/test1.tpl
_http://mysite/twig/examples/test1.tpl?source
_http://mysite/twig/examples/test1.tpl?data
Хандлер tplhandler.php
<?php
error_reporting(-1);
$legalExtensions = array('.tpl');
$file = str_replace('\\', '/', realpath($_SERVER['PATH_TRANSLATED']));
if($file
&& in_array(strrchr($file, '.'), $legalExtensions)
&& substr($file,0,strlen($_SERVER['DOCUMENT_ROOT'])) == $_SERVER['DOCUMENT_ROOT']) {
// Get appropriate data (if any)
$dataFile = './examples/data/'.basename($file, '.tpl').'.php';
$data = file_exists($dataFile) ? include($dataFile) : array();
if (isset($_GET['source'])) {
header('Content-type: text/plain; charset=utf-8');
exit(file_get_contents($file));
} else if (isset($_GET['data'])) {
header('Content-type: text/plain; charset=utf-8');
exit(var_export($data, TRUE));
}
header('Content-type: text/html; charset=utf-8');
?>
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="/twig/markdown/style.css">
<meta name="content-type" http-equiv="content-type" value="text/html; utf-8">
</head>
<body>
<?php
// Initiate Twig environment
require './lib/Twig/Autoloader.php';
Twig_Autoloader::register();
$loader = new Twig_Loader_Filesystem('./examples');
$twig = new Twig_Environment($loader, array(
'cache' => './examples/cache',
'auto_reload' => TRUE));
// Load template & render data
$template = $twig->loadTemplate(basename($file));
echo $template->render($data);
?>
</body>
</html>
<?php
} else {
echo 'Bad filename given';
}