BOLT CM:如何从路由中排除内容类型列表?
如何从Bolt路由中排除特定内容类型
当然可以!结合你给出的pages内容类型配置和contentlisting路由场景,这里有几种实用的方法来实现排除需求:
方法1:通过路由正则规则精准排除
这是最灵活的方式,直接在contentlisting路由的requirements字段中添加负向正则表达式,精准避开你不想匹配的内容类型slug:
contentlisting: path: /{contenttypeslug} defaults: _controller: Bolt\Controller\Frontend\ListingController::listing requirements: # 排除单个内容类型:这里指定排除"pages" contenttypeslug: ^(?!pages$).+$ # 如果要排除多个(比如pages和news),可以修改为: # contenttypeslug: ^(?!pages$|news$).+$
正则说明:^(?!pages$).+$是负向预查表达式,意思是匹配任何不是恰好等于pages的字符串,完美避开你指定的内容类型。
方法2:直接在内容类型配置中禁用列表路由
如果你的pages内容类型本来就不需要公开的前端列表页,直接在它的配置里添加listing: false即可——Bolt会自动不为该内容类型生成对应的列表路由:
pages: name: Pages singular_name: Page description: Create Page class: \Bolt\Extension\Animal\Translate\Content\LocalizedContent listing: false # 新增此行,禁用该内容类型的列表路由 fields: <<: *record_defaults <<: *content_defaults <<: *seo_defaults <<: *template_defaults sort: label: Sort type: integer group: Configuration sort: sort
这种方法最简洁,适合那些不需要对外展示列表的内容类型。
方法3:自定义路由覆盖(高级场景)
如果需要对被排除的内容类型做特殊处理(比如跳转到首页、404页面),可以创建一个优先级更高的路由来覆盖默认规则:
# 先定义这个路由,优先级高于contentlisting pages_override: path: /pages defaults: # 示例1:永久跳转到首页 _controller: Symfony\Bundle\FrameworkBundle\Controller\RedirectController::redirectToRoute route: homepage permanent: true # 示例2:直接返回404页面 # _controller: Bolt\Controller\Frontend\ExceptionController::show404 contentlisting: path: /{contenttypeslug} defaults: _controller: Bolt\Controller\Frontend\ListingController::listing
Symfony路由是按配置顺序匹配的,先定义的路由会优先被匹配,因此访问/pages时会走你自定义的规则,而不是通用的contentlisting路由。
你可以根据实际需求选择最合适的方案:如果只是要隐藏列表页,方法2最省心;如果需要保留内容类型但跳过路由匹配,方法1更灵活;高级场景下用方法3做自定义处理。
内容的提问来源于stack exchange,提问作者TheFlame
相关产品推荐
相关产品推荐

