【问题标题】:Yesod Resources and URL type safety automationYesod 资源和 URL 类型安全自动化
【发布时间】:2013-11-30 23:45:12
【问题描述】:

我一直致力于了解有关 Yesod 的所有信息,但我(有点)卡在路由系统上,它与子站点和跨路由链接有关。我想首先说明的是在整个路由定义和 Hamlet 链接中发现的“ResourceR”模式。

我注意到“类型”本身 (ResourceR) 从未在 Yesod 的 TH DSL 之外进行寻址或引用。这是否意味着它仅真正用作虚拟类型,仅用于在引用 Yesod 链接时利用 Haskell 的类型安全性?我还注意到getResourceRpostResourceR 等函数对于应用程序的工作来说是至关重要的,但它们的定义在样板应用程序代码中的使用位置并不明确。 Yesod 是否只是将对 @{ResourceR} 的调用减少到适当的函数?

我一直觉得我应该将 ResourceR 自己定义为一种数据类型,而实际上它是由 Yesod 在内部生成和减少的。

所以我的问题是:在 Hamlet 和 Route 代码中引用的“资源类型”是否会被 Yesod 的 DSL 自动生成和减少?

提前谢谢你!

【问题讨论】:

  • 看看http://www.yesodweb.com/book/basics,它清楚地描述了Resource数据类型。

标签: haskell yesod type-safety template-haskell hamlet


【解决方案1】:

Yesod 确实扩展了它在路由文件中看到的内容(或您在 quasiquotes 部分中的 parseRoutes 函数中键入的内容),并为服务器提供了适当命名的 get 或 post 函数(通过前缀“get”或“post”到资源名称)。您需要做的就是创建 get/post 函数,框架将使用路由为您调用该函数。您只需要指定路径和请求类型。

像这样将所有路径信息集中在一个位置可以让您轻松调试单个请求的去向(想想替代意大利面条代码的样子)。强制命名标准还使您的代码易于理解,并且代码生成消除了一些重复(即,它可以帮助您遵守dry principle)。

【讨论】:

    猜你喜欢
    • 2013-10-03
    • 1970-01-01
    • 2015-05-20
    • 1970-01-01
    • 1970-01-01
    • 2022-11-30
    • 2019-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多