akawalko/latte-template-renderer

使用 Latte 引擎(一个面向 PHP 的下一代模板系统)实现的接口,用于渲染字符串和 PSR-7 响应对象的测试/模板。

v1.0.0 2024-01-10 14:38 UTC

This package is auto-updated.

Last update: 2024-09-10 16:12:24 UTC


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。