如何在Liftweb中进行通用重写?

时间:2016-02-24 09:17:09

标签: scala lift

我想以通用方式重写网址。例如,我在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代码之外的任何想法?

1 个答案:

答案 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>