Twig包含动态数据

时间:2015-05-04 13:00:01

标签: php twig slim

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

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

我查看了twig文档,除了include函数/标记之外我还没有看到任何可能有用的东西,但我不知道如何轻松获取数据。

我唯一的选择是写一个枝条扩展来做这个或者有更简单的方法吗?

2 个答案:

答案 0 :(得分:2)

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

希望有所帮助。

答案 1 :(得分:2)

在阅读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依赖注入来在运行时实例化控制器。