2013-10-30 56 views
0

我是Yesod的新手,想知道如何列出來自表用戶的所有用戶。使用的數據庫是sqlite。下面是函數使用Yesod Haskell列出來自sqlite表的所有用戶

getAllUsersR :: Handler Html 
getAllUsersR = do "getAllUsersR not implemented yet!" 

,這是表用戶

CREATE TABLE "user"("id" INTEGER PRIMARY KEY,"ident" VARCHAR NOT NULL, 
"password" VARCHAR NULL,CONSTRAINT "unique_user" UNIQUE ("ident")) 
+1

你嘗試過什麼其他不僅僅是建立功能和數據庫? – bheklilr

+0

我嘗試了與runDB,然後defaultLayout的東西,但似乎沒有工作,我不太明白這是如何工作 –

+0

你檢查了[RawSQL的食譜](https://github.com/yesodweb/yesod/wiki/RawSQL)爲耶索德? – bheklilr

回答

1

要讀取身份驗證的用戶,你可以寫:

getUserProfileR :: Handler RepHtml 
getUserProfileR = do 

    userId <- requireAuthId 
    Entity _ userData <- runDB $ selectFirst [UserProfileUser ==. userId] [] >>= return.fromJust 

    defaultLayout $ do 
    setTitle "User profile" 
    $(widgetFile "userprofile") 

列出所有,取出過濾器,使用select代替selectFirst和寫(在部件上)有些像

<h1>User list</h1> 

<table> 
    <tr> 
    <th>Name 
    <th>Mail 
    <th>... 
    $forall (Entity _ userData) <- userList 
    <tr> 
     <td>#{userProfileName userData} 
     <td>#{userProfileMail userData} 
     <td>... 

(原諒我不能寫一個完整的解決方案,但是在這裏我沒有一個開發沙箱)

編輯

完整和測試的例子。 (你需要耶索德平臺和耶索德彬)爲了簡單編輯「處理器/ Home.hs」文件

$ ghc-pkg list | grep yesod-[0-9] 
    yesod-1.2.2.1 
$ yesod init 
$ cd userList 

,並添加

getUserListR :: Handler Html 
getUserListR = do 
    users <- runDB $ selectList [] [] 
    defaultLayout $ do 
    setTitle "Public user list!" 
    [whamlet| 
     <h1>User list</h1> 
     <table> 
      <tr> 
      <th>Mail 
      $forall (Entity _ userData) <- users 
      <tr> 
       <td>#{userIdent userData} 
    |] 

加入下一行到「配置/路線」

測試

$ cabal install 
$ yesod devel 

輸入一些用戶在登錄和登錄了

http://site:port/auth/login 
(do login) 
http://site:port/auth/logout 

列表中的用戶與

http://site:port/userlist 

;)

+0

你能解釋它是如何工作的嗎?它說UserProfileUser不在範圍內,並且widgetFile應該在模板內部嗎? –

+0

@PaktwisHomayun'UserProfile'是一些數據庫實體,如果您使用的是yesod持久性和yesod auth插件(推薦),您有'User'實體,您可以使用它來代替'UserProfile'。對於'widgetFile'問題是的,在模板目錄中,但查找確切的名稱;) – josejuan

+0

非常感謝,這真的有幫助!是否還有一種方法來分離HTML?將代碼放在另一個文件中,並將其鏈接到getUserListR函數。我認爲把$(widgetFile「用戶」)放在最後會做到這一點,但它沒有。 (其中「users」是帶有該html代碼的模板內的users.hamlet文件) –

相關問題