舉個例子,比如說我在models
文件有一個Article
:
Article
artname Text
title Text
keywords Text Maybe
description Text Maybe
body Markdown
parent ArticleId Maybe
user UserId
lastUpdate UTCTime
weight Int
public Bool
UniqueArt artname
deriving Typeable
我並不需要創建一個主鍵articleId
因爲它是由持續性處理。
在我routes
文件:
/new/page ArticleNewR GET POST
/page/#ArticleId/edit ArticleEditR GET POST
/page/#ArticleId/delete ArticleDeleteR GET POST
/page/#ArticleId ArticleViewR GET
的#ArticleId
告訴耶索德只接受ArticleId
在我的網址第二個參數。 Article*R
只是每個URL的處理程序。
在Handler/Article.hs
,我需要有相應的函數處理程序。例如,如果我告訴ArticleViewR
GET處理的耶索德,我需要定義以下功能:
getArticleViewR :: ArticleId -> Handler Html
getArticleViewR articleId = do
-- The article
article <- runDB $ get404 articleId
-- The parent article (if any)
let parentIdM = articleParent article
parentM <- case parentIdM of
Just parentId -> runDB $ get parentId
Nothing -> return Nothing
-- The child articles
children <- runDB $ selectList [ArticleParent ==. Just articleId]
[Asc ArticleWeight, Asc ArticleTitle]
-- Author
author <- runDB $ get (articleUser article)
defaultLayout $ do
setTitle $ toHtml (articleTitle article)
setDescription $ articleDescription article
setKeywords $ articleKeywords article
setAuthor $ userUsername <$> author
$(widgetFile "article/view")
這基本上是你如何鏈接每件。
你看過Yesod Web框架書的Persistent頁嗎? http://www.yesodweb.com/book/persistent – zigazou
@zigazou正如我在我的問題中鏈接到的,是的。 – LuxuryMode
我也是Persistent和Yesod的新手。這個頁面幫助我理解它是如何工作的。你能更精確地瞭解什麼阻止你?你嘗試過腳手架網站嗎? – zigazou