0

私は Yesod を初めて使用し、テーブル ユーザーからすべてのユーザーを一覧表示する方法を知りたいです。使用するデータベースは 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"))
4

1 に答える 1

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>...

(すみません、完全でテスト済みのソリューションを書いていませんが、ここには開発サンドボックスがありません)

編集

完全でテスト済みの例。(yesod-platform と yesod-bin は必要ですか)

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

簡単にするために、「Handler/Home.hs」ファイルを編集して追加します

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}
    |]

次の行を「config/routes」に追加します

/userlist UserListR GET

テストする

$ cabal install
$ yesod devel

一部のユーザーのログインとログインを入力してください

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

でユーザーをリストする

http://site:port/userlist

;)

于 2013-10-30T13:36:30.407 に答える