我想以通用方式重写网址。例如,我在CSV文件中有一个URL列表,读取它们并想要在Liftweb中重写URL。
e.g。该文件包含
买-电子/产品/:ID
便宜的电话/产品/:ID
我想重写那些
/ products?id = [id from path]
我只在Liftweb中找到了案例匹配的示例。通过大小写匹配,它看起来像:
case RewriteRequest(
ParsePath("buy-electronics" :: "products" :: id :: Nil), _, _, _), _, _) => {
RewriteResponse(
List("products"), Map("id" -> id)
)
}
但我没有发现如何以通用方式添加重写规则。除了生成Scala代码之外的任何想法?
答案 0 :(得分:0)
您可以使用模式匹配防护来实现此目的。
在一个简化的例子中,假设路径的第一部分(购买电子产品,廉价电话)是唯一真正改变的东西(也许甚至可以解决你的问题),你可以添加一个检查的警卫它是否包含在您从CSV文件中读取的列表中。
// actually read from CSV
val prefixes = Seq("buy-electronics", "cheap-phones")
case RewriteRequest(ParsePath(prefix :: "products" :: id :: Nil), _, _, _), _, _)
if (prefixes contains prefix) =>
RewriteResponse(List("products"), Map("id" -> id))
如果您需要更复杂的结构,可以在变量(... ParsePath(path), _, ...
)中绑定整个路径,并检查该值是否与列表中的某些行匹配,再次在保护表达式中。< / p>