Twig 包含动态数据

Twig include with dynamic data

我正在使用 Slim Framework 和 Twig 编写网站。

网站上的侧边栏将动态创建链接,我想在每次呈现页面时从 database/cache 获取链接,我可以在每个控制器操作中执行此操作,但我想这样做这在我的基本模板中,所以我不必在每个控制器操作中手动获取和呈现数据。

我查看了 twig 文档,除了包含 function/tag 之外我没有看到任何有用的东西,但我不知道如何轻松获取数据。

我唯一的选择是编写一个树枝扩展来做到这一点还是有更简单的方法?

首先:模板通常不应包含任何类型的业务逻辑,而应仅呈现您提供的数据。 但是,您可以编写一个 custom twig function 并使用它从数据库中获取菜单数据,以便在您的基本模板中呈现它。 或者,您可以编写一些 Slim 中间件来获取数据,这些数据可能能够将数据注入模板。

希望对您有所帮助。

阅读 Anticoms 的回答后,我能够通过编写 Twig 扩展来做到这一点。

public function getFunctions()
{
    return array(
        new \Twig_SimpleFunction('render', array($this, 'render'))
    );
}

public function render($template, $controller, $action) {
    $app = Slim::getInstance();
    return $app->$controller->$action($template);
}

现在我可以简单地写

{{ render('Shared/sidebar.twig', 'Controller', 'Index') }}

进入我的 twig 模板以使用我想要的数据呈现模板。

请注意,我的 render() 函数使用 slim 依赖注入在运行时实例化控制器。