我编写了一个Yesod auth插件,用于邮寄邀请代码,然后需要注册。我想在插件中包含的一件事是一个小部件,其中包含一个用于创建邀请的表单;表单将发布到auth插件中的路由。我遇到的麻烦是找出一个小部件的类型签名,允许创建适当的URL,也可以在主站点的处理程序中使用。
根据要点,小部件看起来像:
invitationWidget :: GWidget Auth m ()
invitationWidget = do
tm <- lift getRouteToMaster
[whamlet|<form action=@{tm inviteR}>|]
inviteR :: AuthRoute
inviteR = PluginR "invite" ["invite"]
问题在于为窗口小部件指定Auth
子网站意味着我无法将其直接嵌入到GHandler master master a
类型的处理程序中(确切错误为Couldn't match type `App' with `Yesod.Auth.Auth'
)。但是,如果未指定子网站,例如invitationWidget :: GWidget s m ()
,然后我看不到inviteR
的方法(错误就是Could not deduce (MonadLift (GHandler Auth m) (GWidget s m))
)。