ashley/template-engine

此包最新版本(v1.0.0)没有提供许可证信息。

简单模板引擎

v1.0.0 2021-10-17 14:21 UTC

This package is auto-updated.

Last update: 2024-09-17 20:48:25 UTC


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();

请记住,通过这种方式创建的模板对象必须有一个布局,否则将不会渲染任何内容。

就这些了!

现在您已经拥有了创建一个伟大网站所需的一切!