akawalko / latte-template-renderer
使用 Latte 引擎(一个面向 PHP 的下一代模板系统)实现的接口,用于渲染字符串和 PSR-7 响应对象的测试/模板。
Requires
- php: >=8.0
- ext-json: *
- ext-tokenizer: *
- akawalko/template-renderer-interface: ^1.0
- latte/latte: ^3.0
Requires (Dev)
- nyholm/psr7: ^1.8
- phpunit/phpunit: ^10.5
README
接口实现,用于使用 Latte 引擎渲染字符串和 PSR-7 响应对象的模板 - 一个面向 PHP 的下一代模板系统。
安装
您可以使用 Composer 下载此库。
需要 php: >=8.0
composer require akawalko/latte-template-renderer
设置
使用 PHP-DI 容器进行示例集成。
// app/dependencies.php return function (ContainerBuilder $containerBuilder) { LatteRenderer::class => function (ContainerInterface $c) { $latte = new \Latte\Engine(); $latte->setLoader(new FileLoader($c->get('templates.directory.host'))); $latte->setTempDirectory($c->get('templates.directory.temp_directory')); $latte->setAutoRefresh($c->get('templates.directory.auto_refresh')); // If you have any additional filters or extensions, register them now. //$latte->addExtension(new SomekindExtension()); //$latte->addFilter('some_filter', fn(string $s) => ...); return new LatteTemplateRenderer($latte); }, // A convenient alias 'template' => get(TemplateRenderer::class), };
方法
__get(string $name);
获取模板变量。返回 mixed 值。
__set(string $name, $value): void;
设置模板变量。
__isset(string $name): bool;
确定一个变量是否已声明且不等于 null。
__unset(string $name): void;
取消设置一个给定的变量
getVar(string $name);
获取模板变量。返回 mixed 值。
setVar(string $name, $value): self;
设置模板变量。
getVars(): array;
获取模板变量。
setVars($data = []): self;
从关联数组或对象中设置模板变量。当提供一个对象时,此方法的行为类似于数组处理中的扩展运算符。也就是说,每个对象属性都将作为独立的项分配给模板,例如,考虑以下示例
$obj = new \stdClass(); $obj->firstname = 'John'; $obj->lastname = 'Connor'; $obj->age = '34'; $latteRenderer->setVars($obj);
然而,在模板中,数据将无需使用前缀即可以对象的形式使用
// this {$firstname}<br> {$lastname}<br> {$age}<br> // instead of {$someObjectname->firstname}<br> {$someObjectname->$lastname}<br> {$someObjectname->$age}<br>
为了实现这一点,给定的对象必须满足以下三个条件之一
- 实现 JsonSerializable 接口
- 实现 toArray() 方法
- 简单地是 stdClass 类的对象
然而,当您的类实现 JsonSerializable 接口时,存在一个注意事项。具体来说,当 jsonSerialize() 方法返回标量而不是数组时,其值将被分配到名为 object_single_var 的键中。后续赋值将覆盖此值。此时无法为返回的标量设置键名。这可能会在未来根据此功能的实用性而改变。
如果您不确定执行 jsonSerialize 方法后对象将返回什么数据,最好使用 setVar(string $name, $value) 方法进行赋值。
renderToString(string $templatePath, $data = []): string;
使用给定的数据将模板渲染为字符串。
renderToResponse(ResponseInterface $response, string $templatePath, $data = []): ResponseInterface;
使用给定的数据将模板渲染为符合 PSR 响应类。
render(...$arguments);
一个快捷方法,根据传递的参数执行 renderToString() 或 renderToResponse()。返回 ResponseInterface 或 string。