bayfrontmedia / veil
一个快速、轻量、框架无关的 PHP 模板引擎。
Requires
- php: ^8.0
- bayfrontmedia/php-array-helpers: ^2.0
- bayfrontmedia/php-sanitize: ^2.0
- erusev/parsedown: ^1.7.4
- pfaciana/tiny-html-minifier: *
README
一个快速、轻量、框架无关的 PHP 模板引擎。
尽管有许多受人尊敬的、知名的 PHP 模板引擎可用,但它们大多数可能非常复杂,包含大量的自定义语法来学习。此外,使用专有库执行简单的函数和迭代可能会引入不必要的复杂性和开销,尤其是在 PHP 本身就是一种模板语言的情况下。
虽然它可能不适用于所有边缘情况,但 Veil 的创建是为了提供一个简单、框架无关的库,以提供最小化和快速模板语言功能,包括模板继承。
许可证
该项目是开源的,可在 MIT 许可证 下获得。
作者
需求
- 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>
在上面的示例中,部分 head
和 content
定义在 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));