ashley / template-engine
简单模板引擎
README
A simple and lightweight PHP templating engine using pure PHP syntax. Simple Template Engine adds on to PHP's templating capabilities by introducing blocks and template inheritance.
它易于学习,适用于小型网站或与微框架结合使用。
需要PHP版本 5.3+
安装
通过 Composer 进行超级简单的安装
$ composer require ashley/template-engine
或手动将其添加到您的 composer.json 文件中。
设置
要使用简单模板引擎,请包含 composer,创建一个 Environment 对象,然后渲染!Environment 的 render() 函数接受模板的路径,渲染它,并以字符串形式返回其内容。
require_once 'vendor/autoload.php'; $env = new Ashley\TemplateEngine\Environment('path/to/templates/directory'); echo $env->render('template.php');
您还可以传递一个扩展名,该扩展名将被附加到 Environment 中所有模板路径的末尾。
$env = new Ashley\TemplateEngine\Environment('path/to/templates', '.php'); //will render index.php echo $env->render('index');
您可以通过数组传递变量到模板中
//index.php echo $env->render('template.php', ['name'=>$value, 'fruit'=>'banana']);
然后您可以在模板中访问变量 $fruit,其值将为 apple。
//template.php My favourite fruit is <?php echo $fruit ?>.
Environment 可以保存所有模板共享的变量,例如助手。设置变量如下
$env->helper = new Helper(); $env->colour = "green";
现在,在您的模板中,您可以使用您的 Helper 对象和您的 colour 变量。
//inside template.php My favourite colour is <?php echo $this->colour ?>. <?php echo $this->helper->doSomething() ?>
块
块是您可以定义并在以后使用的布局部分。您可以通过将文本包含在 $this->block('name here') 和 $this->endblock() 中来定义块
<?php $this->block('title') ?> Welcome to my site! <?php $this->endblock() ?> <?php $this->block('title', 'Welcome to my site!'); //shortcut for small blocks
这将创建一个块对象,您可以通过使用它们的名称通过 $this 在以后访问它。例如,要输出上面定义的块
<title><?php echo $this['title'] ?></title>
您还可以使用 if 结构来设置在块未定义时使用的默认块
<title> <?php if(!$this['title']): ?> Default Title <?php else: echo $this['title']; endif; ?> </title>
输出转义
您可以轻松地转义输出块
echo $this['title']->escape(); // OR this shorthand notation echo $this['title']->e();
endblock 函数返回一个块对象,您可以直接输出。这对于在调用 escape() 后立即转义块非常有用
<?php $this->block() ?> <script>alert('I am dangerous code!');</script> <?php echo $this->endblock()->escape() ?>
如上所示,我们没有给我们的块分配一个名称,因为我们立即输出了它,并且没有保存它的需要。如果您没有给块分配一个名称,它以后就不能访问了。
过滤器
您可以将闭包传递给 endblock,以便将其应用于内容。
<?php $this->block() ?> Hello, this is a block of text. <?php echo $this->endblock(function($content) { return strtoupper($content); }); ?>
上面的代码将块的内容转换为大写。
模板继承
块非常有用,因为我们可以在一个模板中定义块,然后 扩展 另一个模板并在那里使用它!这允许我们多次重用模板,如布局,使用不同的块。通过 extend 函数扩展模板
<?php $this->extend('layout.php'); ?> <?php $this->block('title', 'My Awesome Page') ?> <?php $this->block('scripts') ?> <script src="jquery.js"></script> <?php $this->endblock() ?> This is my content.
当您扩展父模板时,子模板中的任何非块代码将成为父模板中名为 content 的特殊块。在上面的代码中,我们定义了一个标题块和一些内容。现在我们可以在扩展的布局中使用它。在 layout.php 中,我们可以使用 $this['content'] 和 $this['title'] 输出我们的内容和标题。
<!-- my layout --> <html> <head> <title><?=$this['title'] ?></title> <?=$this['scripts'] ?> </head> <body> <?=$this['content'] ?> </body> </html>
请小心不要将块命名为 content,除非您有意定义一个内容块。如果您定义了一个内容块,它将被添加到布局中的非块内容之前。
扩展模板的模板的模板:如果父模板正在扩展另一个模板,则父模板中的任何非块内容将被附加到子模板的内容块中。这个新的内容块将成为祖父母的 content 块。
模板
模板也可以不通过从文件渲染来创建,其块可以在PHP中定义。您可以通过Environment的template()函数创建一个新的模板对象。
$template = $env->template(); $template->extend('layout.php'); $template['content'] = "hello"; echo $template->render();
请记住,通过这种方式创建的模板对象必须有一个布局,否则将不会渲染任何内容。
就这些了!
现在您已经拥有了创建一个伟大网站所需的一切!