一个快速、轻量、框架无关的 PHP 模板引擎。

v2.1.1 2023-07-27 15:21 UTC

This package is auto-updated.

Last update: 2024-08-27 17:54:00 UTC


README

一个快速、轻量、框架无关的 PHP 模板引擎。

尽管有许多受人尊敬的、知名的 PHP 模板引擎可用,但它们大多数可能非常复杂,包含大量的自定义语法来学习。此外,使用专有库执行简单的函数和迭代可能会引入不必要的复杂性和开销,尤其是在 PHP 本身就是一种模板语言的情况下。

虽然它可能不适用于所有边缘情况,但 Veil 的创建是为了提供一个简单、框架无关的库,以提供最小化和快速模板语言功能,包括模板继承。

许可证

该项目是开源的,可在 MIT 许可证 下获得。

作者

Bayfront Media

需求

  • PHP ^8.0

安装

composer require bayfrontmedia/veil

用法

开始使用 Veil

默认配置

use Bayfront\Veil\FileNotFoundException;
use Bayfront\Veil\Veil;

$options = [
    'base_path' => '', // Path to template files (no trailing slash)
    'file_extension' => '.veil.php' // Template file extensions (starting with ".")
];

$veil = new Veil($options);

处理内容

模板标签

可以使用多种模板标签与 Veil 一起使用。这允许实现诸如模板继承(文件链式)、内容注入和使用传递的参数等功能。

以下模板标签可以在 HTML 和视图文件中使用

注意

默认值可以是纯文本字符串,也可以是使用点符号表示法在 $data 数组中的另一个键。

部分

部分用于使用 @section 标签定义一个 HTML 块,该标签通过 @place 标签放置在视图中。

示例 pages/index

@section:head

<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Open+Sans&display=swap" rel="stylesheet">
<style>html {
        font-family: 'Open Sans', sans-serif;
    }</style>

@endsection

@section:content

<p>Welcome, {{name}}!</p>

<p>This is some content.</p>

@endsection

@use:layouts/default

示例 layouts/default

<!DOCTYPE html>
<html lang="en">
<head>

    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <title>{{title}}</title>

    @place:head

</head>
<body style="background-color:#f0f0f0;color:#323232;">

<div style="max-width:800px;margin:auto;background-color:white;padding:1rem;">

    <h1>{{title}}</h1>

    @place:content

    @use:layouts/partials/sidebar

    @use:layouts/partials/footer

</div>

?@place:end_body

</body>
</html>

在上面的示例中,部分 headcontent 定义在 pages/index 中,然后放置在 layouts/default 中。

此外,可选的 end_body 部分放置在关闭 body 标签之前。

原始 PHP

视图文件可以直接通过原始 PHP 访问 $data 数组。实际上,任何其他 PHP 代码都可以直接嵌入到任何视图文件中。但是,这应该仅限于简单的任务,例如执行循环迭代。经常从视图中嵌入原始 PHP 可能意味着模板中有过多的逻辑。

公开方法

getBasePath

描述

返回基本路径。

参数

  • (无)

返回

  • (字符串)

setBasePath

描述

设置基本路径。

参数

  • $base_path (字符串)

返回

  • (void)

inject

描述

通过其相应的类型添加可注入项。

在模板中使用的默认可注入项类型包括

  • css:将内容包装到 CSS <link> 元素中
  • js:将内容包装到 <script> 元素中
  • head:将内容插入到 <head> 部分中
  • end_body:将内容插入到 </body> 标签之前

除了默认可注入项类型外,还可以添加并使用自定义类型。

注意:如果 $content 是一个数组,所有可注入项将共享相同的优先级。

参数

  • $type (字符串)
  • $content (字符串|array)
  • $priority = 5 (int):相同类型的可注入项将按优先级顺序注入

返回

  • (self)

示例

$veil->inject('js', 'javascript-file.js');

使用上述示例,每当出现 @inject:js 模板标签时,它将被替换为

<script src="javascript-file.js"></script>

getHtml

描述

获取编译后的HTML字符串。

参数

  • $html (字符串)
  • $data = [] (数组):传递给HTML的数据
  • $minify = false (布尔值):是否最小化编译后的HTML?有关更多信息,请参阅最小化

返回

  • (字符串)

抛出异常

  • Bayfront\Veil\FileNotFoundException

示例

$html = 'Hello, {{name}}! Please visit: <a href="https://www.example.com">example.com</a>.';

try {

    $html = $veil->getHtml($html, ['name' => 'John']);

} catch (FileNotFoundException $e) {

    http_response_code(404);

    die($e->getMessage());

}

html

描述

输出编译后的HTML。

参数

  • $html (字符串)
  • $data = [] (数组):传递给HTML的数据
  • $minify = false (布尔值):是否最小化编译后的HTML?有关更多信息,请参阅最小化

返回

  • (void)

抛出异常

  • Bayfront\Veil\FileNotFoundException

示例

$html = 'Hello, {{name}}! Please visit: <a href="https://www.example.com">example.com</a>.';

try {

    $veil->html($html, ['name' => 'John']);

} catch (FileNotFoundException $e) {

    http_response_code(404);

    die($e->getMessage());

}

getView

描述

获取编译后的模板文件作为字符串。

参数

  • $file (字符串):从基本路径到文件的路径,不包括文件扩展名
  • $data = [] (数组):传递给视图的数据
  • $minify = false (布尔值):是否最小化编译后的HTML?有关更多信息,请参阅最小化

返回

  • (字符串)

抛出异常

  • Bayfront\Veil\FileNotFoundException

示例

try {

    $html = $veil->getView('/path/to/file', ['name' => 'John']);

} catch (FileNotFoundException $e) {

    http_response_code(404);

    die($e->getMessage());

}

view

描述

输出编译后的模板文件。

参数

  • $file (字符串):从基本路径到文件的路径,不包括文件扩展名
  • $data = [] (数组):传递给视图的数据
  • $minify = false (布尔值):是否最小化编译后的HTML?有关更多信息,请参阅最小化

返回

  • (void)

抛出异常

  • Bayfront\Veil\FileNotFoundException

示例

try {

    $veil->view('/path/to/file', ['name' => 'John']);

} catch (FileNotFoundException $e) {

    http_response_code(404);

    die($e->getMessage());

}

minify

描述

最小化HTML。

目前,Veil使用Tiny Html Minifier进行此方法。

注意:在某些情况下,HTML可能无法正确最小化,因此请谨慎使用。建议在生产环境中使用之前,用您的HTML和视图测试此功能。

参数

  • $html (字符串)

返回

  • (字符串)

示例

参见markdown

markdown

描述

将Markdown语法转换为HTML。

目前,Veil使用Parsedown进行此方法。

参数

  • $markdown (字符串)

返回

  • (字符串)

示例

将包含Markdown的视图文件转换为最小化的HTML

try {

    $md = $veil->getView('path/to/markdown');

} catch (FileNotFoundException $e) {

    http_response_code(404);
    die('View not found!');

}

echo $veil->minify($veil->markdown($md));