robertkleinschuster / mosaic
PHP 的组件渲染器
v0.0.1
2024-03-07 20:16 UTC
Requires
- php: ^8.2
Requires (Dev)
- phpstan/phpstan: ^1.10.21
- phpunit/phpunit: ^10.4.1
README
PHP 的组件渲染器
Mosaic 是一款先进的 PHP 服务器端渲染引擎。它提供了一种高效灵活的方法来构建和渲染 UI 组件。专门为 PHP 开发者设计,它可以与语言的本生能力无缝结合,从而提供丰富、面向组件的开发体验。
主要优势
专为 PHP 开发者设计
- PHP 本生经验:针对 PHP 设计,无需遵循 MVC 模型,Mosaic 可以无缝集成到 PHP 项目中,利用语言的优势。
灵活的组件类型
- 多功能的组件策略:Mosaic 支持闭包、片段和可渲染对象,促进模块化和可重用设计实践,而不仅仅是模板渲染。
可扩展和可定制
- 开箱即用的自定义策略:该库允许自定义渲染策略,以实现无与伦比的灵活性,非常适合具有独特渲染需求的工程。
轻量级和性能高
- 最小开销:设计得非常精简,Mosaic 提供了卓越的性能,适用于从小型到大型规模的各个项目。
专注于服务器端渲染
- 针对服务器端效率优化:专注于服务器端渲染,它利用服务器能力来实现快速响应时间和有效资源使用。
安装
通过 Composer 安装
composer require robertkleinschuster/mosaic
用法
以下是支持组件类型的示例
字符串组件
处理简单的字符串
$renderer->render("Hello, world");
默认情况下,字符串将被转义,要渲染 html,请使用片段。
片段组件
组合 UI 片段
$fragment = $renderer->fragment('<div>Hello, world</div>'); $renderer->render($fragment);
闭包组件
动态渲染 PHP 闭包
$renderer->render(function ($data) { return "Hello, " . $data['name']; }, ['name' => 'world']);
返回值被评估为组件。
可迭代组件
遍历组件的可迭代对象
$items = ['item1', 'item2', 'item3']; $renderer->render($items);
这通常与 PHP 生成器语法一起使用
$items = ['item1', 'item2', 'item3']; $renderer->render(function() { yield "first\n", yield "second\n", yield "third\n", });
可渲染组件
利用实现 Renderable 接口的对象
class MyComponent implements \Mosaic\Renderable { public function render(\Mosaic\Renderer $renderer, $data) { yield $renderer->fragment("<div>Hello, {$data['name']}</div>"); } } $renderer->render(new MyComponent(), ['name' => 'world']);
在这个示例中,使用 PHP 生成器语法生成子 HTML 片段。
属性组件
使用 PHP-8 属性将闭包包装在另一个组件中。
#[Attribute] class MyWrapper implements \Mosaic\RenderableAttribute { public function render(\Mosaic\Renderer $renderer, mixed $children, mixed $data){ return $renderer->fragment(<<<HTML <p class="wrapper"> {$renderer->render($children, $data)} </p> HTML ); } }
$renderer->render(#[MyWrapper] fn() => 'Hello world!')
字符串 "Hello world!" 现在将在 MyWrapper 组件定义的段落中渲染。
向组件传递参数
$renderer->render(fn(string $name) => "Hello $name!", name: 'world')
扩展 Mosaic
其设计允许简单扩展,使开发者能够创建自定义渲染策略、辅助工具等,以满足特定应用需求。
运行测试
要执行测试套件,请在您的 CLI 中运行适当的命令。
贡献
非常感谢贡献,无论是通过问题报告、功能建议还是直接代码贡献。
许可
在 MIT 许可证下分发。有关更多信息,请参阅 LICENSE 文件。
获取帮助
对于问题、问题或帮助,请打开 GitHub 上的问题。