导航中具有动态内容(从数据库加载)的 Symfony 网站
Symfony website with dynamic content (loaded from the database) in the navigation
我正在使用的网站有一个名为类别的导航菜单项,它是一个下拉菜单,其中包含数据库中的一些条目(用户可以从管理面板调整类别。)导航位于base.html.twig
由所有其他 twig 文件扩展的文件。
问题:获取这些条目的最佳方式是什么?我想到的唯一方法是使用对 {{ render(controller(...)) }}
的调用,这将创建一个新请求,在我看来这有点矫枉过正,并且通常会减慢页面速度。有更好的方法吗?也许是在每个请求上调用并能够将数据传输到视图文件的事件?
你有两个很好的选择来实现这一点:
- 在您的 twig 模板中使用 render() 从控制器调用特定方法(如您在消息中所说)
- 创建一个 twig 扩展来呈现您的菜单,这非常简单:http://symfony.com/doc/current/cookbook/templating/twig_extension.html
在我看来,您应该使用第一个选项(控制器),因为您只需要渲染菜单 1 次。 Twig 扩展经过更好的设计,可以在多个模板中重复使用。
关于您的性能问题,别担心,您只需要缓存您的菜单,因为它不会经常更改,并且当您的后台更新菜单时缓存无效。
此致
我正在使用的网站有一个名为类别的导航菜单项,它是一个下拉菜单,其中包含数据库中的一些条目(用户可以从管理面板调整类别。)导航位于base.html.twig
由所有其他 twig 文件扩展的文件。
问题:获取这些条目的最佳方式是什么?我想到的唯一方法是使用对 {{ render(controller(...)) }}
的调用,这将创建一个新请求,在我看来这有点矫枉过正,并且通常会减慢页面速度。有更好的方法吗?也许是在每个请求上调用并能够将数据传输到视图文件的事件?
你有两个很好的选择来实现这一点:
- 在您的 twig 模板中使用 render() 从控制器调用特定方法(如您在消息中所说)
- 创建一个 twig 扩展来呈现您的菜单,这非常简单:http://symfony.com/doc/current/cookbook/templating/twig_extension.html
在我看来,您应该使用第一个选项(控制器),因为您只需要渲染菜单 1 次。 Twig 扩展经过更好的设计,可以在多个模板中重复使用。
关于您的性能问题,别担心,您只需要缓存您的菜单,因为它不会经常更改,并且当您的后台更新菜单时缓存无效。
此致