4

私は Haskell の初心者であり、Yesod の初心者でもあると推測できます。Haskell と Web 開発についてもう少し学ぶ方法として、両方を試してみたいと思いました。

私には 2 つの問題がありますが、どちらも Haskell の知識が不足しているために犯したばかげた間違いである可能性があります。

(1) sqlite で scaffold サイトを作成しました (Yesod 1.2 を使用しています)。生成されたhomepage.hamletファイルに1行だけ追加しようとしましたが、エラーが発生しました(ところで、この追加なしでサイトは正常に動作します)。私が追加した行は次のとおりです。

<a href=@{AuthR LoginR}>Go to the login page

その後、次のエラー メッセージが表示されます。

Handler/Home.hs:34:11:
Not in scope: data constructor `LoginR'
In the result of the splice:
  $(widgetFile "homepage")
To see what the splice expanded to, use -ddump-splices
In a stmt of a 'do' block: $(widgetFile "homepage")
In the second argument of `($)', namely
  `do { aDomId <- newIdent;
        setTitle "Welcome To Yesod!";
        $(widgetFile "homepage") }'

他のハンドラー/テンプレートで LoginR を公開する方法はありますか?

(2)最終的にログインページのルックアンドフィールをカスタマイズしたいので、ここの指示に従ってみました(また、スコープ内で独自のハンドラを宣言しているため、これで上記の問題に対処できると考えました):http://hackological.com/ blog/using-twitter-to-authenticate-in-yesod/ . 基本的に、Foundation.hs の authRoute ステートメントを次のように変更しました。

authRoute _ = Just LoginPanelR

そしてルートを追加しました:

/login LoginPanelR GET

Home.hsにハンドラーを追加しました

getLoginPanelR :: Handler RepHtml
getLoginPanelR = defaultLayout $(widgetFile "login")

また、リンクで提供されているコンテンツを使用して、対応する login.hamlet ファイルも作成しました。次に、次のエラーが表示されます。

Foundation.hs:100:32:
Couldn't match type `App' with `Auth'
Expected type: Route Auth
  Actual type: Route App
In the first argument of `AuthR', namely `LoginPanelR'
In the second argument of `($)', namely `AuthR LoginPanelR'
In the expression: Just $ AuthR LoginPanelR

私が間違っていることを教えてください。

ありがとう!

4

1 に答える 1

5

(1)については、Yesod.Auth をインポートするだけです。(2) の場合: Hamlet テンプレートで、 を使用しているようですAuthR LoginPanelR。ただし、LoginPanelR はauth サブサイトの一部ではないため、AuthR は省略してください。

于 2013-06-12T10:20:52.207 に答える