You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:30:22