我正在使用Slim Framework和Twig编写一个网站。
网站上的侧边栏将动态创建链接,我希望每次呈现页面时都从数据库/缓存中获取链接,我可以在每个控制器操作中执行此操作,但我想在我的基础上执行此操作模板,所以我不必在每个控制器动作中手动获取和呈现数据。
我查看了twig文档,除了include函数/标记之外我还没有看到任何可能有用的东西,但我不知道如何轻松获取数据。
我唯一的选择是写一个枝条扩展来做这个或者有更简单的方法吗?
答案 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依赖注入来在运行时实例化控制器。