doppy / nav-bundle
为您的应用程序提供菜单的包。
Requires
- php: ^7.0
- symfony/framework-bundle: ^4.0
- twig/twig: ^2.4
Suggests
- symfony/cache: For caching of generated Nav's
- symfony/stopwatch: For timing information in the profiler (dev only)
README
一个提供创建菜单及其缓存的有用工具的 Symfony 包。
安装
添加到 composer
composer req doppy/nav-bundle
并确保该包已注册。目前没有 symfony flex 的配方,但默认配方应该适用于大多数情况。
创建您自己的 NavBuilder
您可以创建自己的 NavBuilder 服务。此服务将返回一个包含 NavItem
的 Nav
对象,这实际上是您的导航或菜单。
在 symfony 中配置您的服务,添加一个简单的标签使其可用
services:
\App\NavBuilder\SideBarBuilder:
tags:
- { name: "doppy_nav.builder", provides: "sidebar" }
provides
参数是强制性的,并且是您的 Nav 可用的名称。
在需要时,您可以添加自己的依赖项。如果想要根据特定用户或权限自定义 Nav,有用的建议可以是 tokenstorage
和 authorization_checker
。
您可以选择如何处理 nav-label 的翻译。您可以在 Builder 本身中设置正确的文本,或在渲染模板时通过翻译器运行标签。
Nav
和 NavItem
对象都有一个可用的 attributes
属性,您可以使用它自由配置在渲染时可能需要的其他属性。
使用您的 Nav
有几种方法可以使用您创建的 Nav
从提供者获取
您可以直接从提供者请求 Nav 对象。这样您可以将一个 Nav 插入另一个 Nav 中。
$navProvider = $this->getServiceContainer()->get('doppy_nav.provider');
$nav = $navProvider->get('sidebar', array('youroption' => 'yourvalue'));
- 第二个参数可以用来向构建器传递选项,这是可选的。
- 如果选项中不包含键
_locale
,它将使用当前区域设置添加。
在 Twig 中获取
通过在 Twig 中获取对象,然后可以以您喜欢的方式渲染它。
{{ set nav = doppy_nav('sidebar', ['youroption': 'yourvalue']) }}
这与提供者的 get
方法相同(见上文)。
在 Twig 中渲染
您还可以直接在 twig 中渲染 Nav。这是一个更简洁的解决方案,也支持缓存。
{{ doppy_nav_render('sidebar', [], 'YourBundle:Nav:nav.html.twig', []) }}
- 前两个参数传递给提供者以获取 Nav 对象。
- 第三个参数是用于渲染的模板。如果没有提供,将使用默认模板。
- 第四个参数传递给模板进行渲染。键
nav
是保留的,因为 Nav 对象将被传递到那里。
缓存您的导航
由于它可能不会经常改变,因此缓存您的导航可能是个好主意。
配置缓存
请确保已安装 symfony/cache
组件(通过 composer),因为它用于缓存。调整您的配置以启用缓存
doppy_nav: cache: provider: "cache.app" render: "cache.app"
您需要指定要使用的缓存服务名称。
provider
将缓存提供者的结果(实际上是导航对象)render
将缓存 twig 渲染函数的结果。
您使用哪种缓存由您决定,但您可能不需要两者都使用。在大多数简单情况下,您只需启用 render
。
默认情况下禁用缓存。
要调整缓存持续时间,请调整所提供服务的配置。
可缓存构建器
要使您的构建器可缓存,只需实现接口 Doppy\NavBundle\Builder\CacheableBuilderInterface
。现在您需要提供一个额外的方法,用于在请求导航时提供要使用的缓存键。通常基本名称就足够了,但如果您为特定用户自定义导航,您可能希望添加用户名或用户ID。
将在您的缓存键后附加一个后缀,它由以下内容构成
- Builder
-
- 提供的选项的 md5 哈希。
- Render
-
- 提供者提供的任何哈希。
-
- 提供的模板和模板选项的 md5 哈希。
失效
目前没有配置缓存失效。您只需等待其过期,或清除所有 symfony 缓存。
高级:创建自己的提供者
构建器只能创建 1 个导航(但您可以通过选项稍作调整)。您可以添加自己的提供者,该提供者可以管理大量导航。您需要实现接口 \Doppy\NavBundle\Provider\ProviderInterface
。如果您想在数据库中管理它们,这可能很有用。
要了解如何进行此操作,请查看服务 doppy_nav.provider.builder
。
您还可以使用 \Doppy\NavBundle\Provider\CacheableProviderInterface
使您的提供者可缓存。