将附加信息附加到 Yesod 路线
Attaching additional information to Yesod routes
对于我的站点,我想将附加信息附加到 Yesod 的路线。例如。我想要特殊的导航路径(上一页、下一页、父页面等)或自动创建一个概览页面,将其用于(分层)面包屑等。
基本上,我希望能够将我选择的记录附加到路线。在示例中,此记录可能如下所示:
data AdditionalRouteInfo = ARI { nextPage :: Maybe (Route App)
, prevPage :: Maybe (Route App)
, parentPage :: Maybe (Route App)
, seeAlso :: [Route App]
, description :: String
}
Yesod的路由属性只能是字符串,所以这是不够的。我的第一个冲动是使用 Data.Map (Route App) AdditionalRouteInfo
但后来我发现 Route App
不是 Ord
的实例:-(
那么推荐的实现方式是什么?我能想到的唯一方法是编写一个函数 myRouteInfo :: Route App -> AdditionalRouteInfo
并通过模式匹配来摆脱这种困境。但这感觉很笨拙。还有其他办法吗?
模式匹配正是我所推荐的,因为这意味着编译器可以检查您是否解决了所有情况。 Yesod 的内置面包屑支持遵循这种方法。
对于我的站点,我想将附加信息附加到 Yesod 的路线。例如。我想要特殊的导航路径(上一页、下一页、父页面等)或自动创建一个概览页面,将其用于(分层)面包屑等。
基本上,我希望能够将我选择的记录附加到路线。在示例中,此记录可能如下所示:
data AdditionalRouteInfo = ARI { nextPage :: Maybe (Route App)
, prevPage :: Maybe (Route App)
, parentPage :: Maybe (Route App)
, seeAlso :: [Route App]
, description :: String
}
Yesod的路由属性只能是字符串,所以这是不够的。我的第一个冲动是使用 Data.Map (Route App) AdditionalRouteInfo
但后来我发现 Route App
不是 Ord
的实例:-(
那么推荐的实现方式是什么?我能想到的唯一方法是编写一个函数 myRouteInfo :: Route App -> AdditionalRouteInfo
并通过模式匹配来摆脱这种困境。但这感觉很笨拙。还有其他办法吗?
模式匹配正是我所推荐的,因为这意味着编译器可以检查您是否解决了所有情况。 Yesod 的内置面包屑支持遵循这种方法。