splashsky / modello
一个简单、轻量级的模板编译器
README
Modello - 简单、轻量级的模板编译器
Modello 是一个超级简单、超级轻量级的模板引擎,用 PHP 编写。它的目的是成为一个可以包含在任何项目中并用于快速高效地解析/编译模板的独立类。
贡献
虽然我不打算让这个项目替代其他模板解决方案,但我觉得为小型项目制作一个简单的编译器很有趣。目标是易用性和紧凑性,希望我的工作能反映这一点。
如果你有想法,或者想贡献一些代码,请随时创建一个 Issue 或 Pull Request。感谢您的光临!
入门
在您的项目中使用 Modello 的最简单方法是 Composer。
composer require splashsky/modello
否则,您可以下载 .zip
文件或使用 Git 克隆项目。之后,将 Modello.php
类文件移动到您想要的位置!
如何启动编译器?
Modello 很容易入门。
// require() and/or 'use' Modello, depending on your environment $modello = new Modello('path/to/views', 'path/to/cache');
构造函数的第一个参数告诉 Modello 模板目录的位置,这将作为 Modello 寻找模板文件的根目录。第二个参数告诉 Modello 在哪里创建编译后的视图。
提供 $modello->setViews(string $viewPath)
和 $modello->setCache(string $cachePath)
可在运行时更改视图和缓存目录。
使用 $modello->setExtension(string $extension)
允许您更改 Modello 在模板文件上查找的扩展名 - 默认为 .mllo.php
。
您可以使用 $modello->setCacheEnabled(bool $enabled)
启用或禁用缓存 - 禁用意味着 Modello 在每次渲染时都会重新编译视图。
如何编译模板?
只需调用 $modello->view()
!
/** * File Directory * | cache/views/ * example.php (will be created at render) * | views/ * example.mllo.php */ echo $modello->view('example', ['foo' => 'bar']);
告诉 Modello 要渲染哪个模板时,请确保您没有添加扩展名 - 只使用模板的名称。Modello 将使用它设置的任何扩展名来查找您的文件。您也可以使用点表示法,所以 'foo.bar' 和 'foo/bar' 是等效的。
view()
函数的第二个参数是您的数据数组 - 这些 key => value
对将被提取到生成的模板中。
当模板首次编译或 Modello 检测到原始模板文件已更改时,它将生成一个新的模板编译版本,并将其存储在缓存目录中以供后续渲染更快。
我可以在模板中使用什么语法?
Modello 使用的模板语法与 Laravel Blade 非常相似(基本上是相同的)。以下是它目前支持的指令
// This is the echo syntax
{{ $foo }}
{{ bar() }}
// This is the if-else syntax
@if(condition)
// ...
@elseif(condition)
// ...
@else
// ...
@endif
// This is the foreach syntax
@foreach($array as $key => $value)
{{ $key }} equals {{ $value }}
@endforeach
// This is a comment
{{-- I won't show up in the HTML or in the compiled template file! --}}
// This is the almighty include directive!
@include('path.to.template')
// We also support blocks and yielding
@block('foo')
something here
@endblock
@yield('foo') // Outputs: something here
// Add block conditionals
@hasblock('foo')
if block foo exists, this will be output!
@endif
@blockmissing('bar')
if the bar block doesn't exist, this will be put out!
@endif
只要您提供给指令的数据是有效的 PHP,它就会工作!
对于 include 指令,它将在您提供给 Modello 的模板目录中查找指定的模板。如果它找不到指定的模板,它将返回 "无法找到 path/to/template.php",这将显示在您的 HTML 中。
如果我只需要解析呢?
Modello 仍然保留了之前的经典解析功能 - 在静态方法 parse()
中。
echo Modello::parse('Hello, {{ name }}!', ['name' => 'Jerry']);
当然,您将无法访问编译模板的任何指令或其他功能。
许可证
Modello 是完全免费的开源软件。它受 MIT 许可证的约束,您可以在 license.md 中查看详细信息。