ujpef/latte-view

Latte 瘦型包装器

0.0.4 2019-03-05 14:54 UTC

This package is auto-updated.

Last update: 2024-09-29 04:19:48 UTC


README

Latte 模板引擎包装器,用于Slim 微型框架

您可以使用这个小库将 Latte 模板集成到基于 Slim 框架的项目中。

该项目是为布尔诺的 Mendel 大学APV 课程而创建的。

安装

您可以使用 Composer 下载此库

composer require ujpef/latte-view

方法

__construct(Latte\Engine $latte, $pathToTemplates)

创建 Latte 包装器的实例。传递配置好的 Latte 引擎实例。在传递给包装器之前,您应该配置 Latte 引擎:设置模板路径和设置模板的缓存文件夹。

$engine = new \Latte\Engine\Engine();
$engine->setLoader(new \Latte\Loaders\FileLoader(__DIR__ . '/../templates/'));
$engine->setTempDirectory(__DIR__ . '/../cache');

$latteView = new \Ujpef\LatteView\LatteView($engine);

addParam($name, $param)

创建名为 $name 的模板变量,其值为 $param

addParams(array $params)

将多个值传递给模板。$params 数组必须是关联数组。

render(Response $response, $name, array $params = [])

使用由 $params 关联数组提供的模板变量集渲染由 $name 给定的模板,并创建新的 Response 对象。

返回新的 Response 对象实例,可以从路由或中间件返回。

addFilter($title, callable $callback)

添加自定义 Latte 过滤器 - {$variable|customFilter}

addMacro($name, callable $callback)

添加自定义 Latte 宏 - {customMacro param}

Slim 框架集成

定义 Slim 框架依赖项(如有需要,更改模板源文件夹和缓存目录位置)

use Latte\Engine;
use Latte\Loaders\FileLoader;
use Ujpef\LatteView;

$container['view'] = function ($container) use ($settings) {
    $engine = new Engine();
    $engine->setLoader(new FileLoader(__DIR__ . '/../templates/'));
    $engine->setTempDirectory(__DIR__ . '/../cache');

    $latteView = new LatteView($engine);
    return $latteView;
};

要调用 Latte 模板渲染的结果,请调用 render() 方法。

$app->get('/[{name}]', function (Request $request, Response $response, $args) {
    $tplVars = [
        'variable' => 123
    ];
    return $this->view->render($response, 'index.latte', $tplVars);
})->setName('index');

在模板中使用

<!DOCTYPE html>
<html>
    <head>
        <title>test template</title>
    </head>
    <body>
        contents of variable: {$variable}
    </body>
</html>

使用命名路由

要在 Latte 宏中像这样使用 Slim 的内置 路由器(例如 {link routeName}),请在依赖定义中添加以下行

use Latte\Engine;
use Latte\MacroNode;
use Latte\PhpWriter;
use Latte\Loaders\FileLoader;
use Ujpef\LatteView;

$container['view'] = function ($container) use ($settings) {
    $engine = new Engine();
    $engine->setLoader(new FileLoader(__DIR__ . '/../templates/'));
    $engine->setTempDirectory(__DIR__ . '/../cache');

    $latteView = new LatteView($engine);
    $latteView->addParam('router', $container->router);
    $latteView->addMacro('link', function (MacroNode $node, PhpWriter $writer) {
        if (strpos($node->args, ' ') !== false) {
            return $writer->write("echo \$router->pathFor(%node.word, %node.args);");
        } else {
            return $writer->write("echo \$router->pathFor(%node.word);");
        }
    });
    return $latteView;
};

请记住为您的路由设置名称

$app->get('/test', function (Request $request, Response $response, $args) {
    //route implementation
})->setName('routeName');

这也适用于路由占位符

$app->get('/test/{something}', function (Request $request, Response $response, $args) {
    //route implementation
})->setName('routeName');

在模板中使用

<a href="{link routeName ['something' => 123]}">link</a>