标签: yesod

使用带有setMessage的类型安全的URL?(Shamlet与hamlet)

如何在setMessage中使用类型安全的URL?

我想改变

 ...
 setMessage [shamlet|<span .warning>Warning! See Help.|]
 ...
Run Code Online (Sandbox Code Playgroud)

到包含链接的邮件.

从我迄今为止所能收集的内容来看,它应该以某种方式工作

 ...
 renderer <- getUrlRender
 let html = [hamlet|<span .warning>Warning! See #
                     <a href=@{HelpR}> Help!|]
 setMessage $ toHtml $ html renderer
 ...
Run Code Online (Sandbox Code Playgroud)

但是该代码只是让我在整个文件中出现令人困惑的错误消息.

我确实阅读了关于莎士比亚模板的印刷Yesod书章,但我发现它对所涉及的类型并不十分明确.例如,什么类型的[hamlet|...|]|产品?没有URL-Interpolation,ghci报告t -> Markup但是内部有URL-Interpolation,我只是得到错误.

我对所涉及的所有类型同义词感到困惑,例如[shamlet|...|]提供类型的东西Html,同时setMessage期望a Html ().我不知道如何轻松查看这些内容:Hoogle经常发现这个主题没有任何内容,而Google总是发现可能过时的版本(示例不再有效) - 确定我最终会获得最新版本,但是有一个地方我对这些进行了简单的概述?(ghci可以列出一个类型的所有同义词吗?)

请注意,我实际上想要在纯函数代码片段中生成消息,稍后由处理程序使用.这就是为什么我想将URL呈现与指定hamlet的位置分开.感谢任何指针朝着正确的方向!

yesod hamlet

3
推荐指数
1
解决办法
253
查看次数

在yesod中提供特定的html文件

我正在尝试使用静态文件路由,webservice api和域根目录的家庭地址来设置服务器.我的yes应用程序看起来像这样:

mkYesod "App" [parseRoutes|
/static StaticR Static getStatic
/ HomeR GET
... api routes
|]
Run Code Online (Sandbox Code Playgroud)

现在我发现了如何提供静态文件以及如何处理api请求.但我坚持这个getHomeR定义.我只是想提供一个index.html文件.我可以手动读取它并将其作为字符串传递.但是有没有一个有效的内置解决方案来提供特定的html文件?

haskell yesod

3
推荐指数
1
解决办法
645
查看次数

在Yesod中使用UTCTime和SQLite

UTCTime在Yesod中使用我的模型中的字段时,我收到以下错误:

PersistMarshalError "field timestamp: Expected UTCTime, received PersistText \"09:18:07\""
Run Code Online (Sandbox Code Playgroud)

我正在使用SQLite来存储我的数据库.我的模型如下:

Myobject
    timestamp UTCTime default=CURRENT_TIME
    otherfield Text
Run Code Online (Sandbox Code Playgroud)

请注意,使用和不使用默认值时都会发生此错误.

我正在选择Myobject-entities 列表如下:

myobjects <- selectList [] [Desc MyobjectTimestamp]
Run Code Online (Sandbox Code Playgroud)

使用MyobjectOtherfield而不是MyobjectTimestamp没有任何帮助,这是有道理的,因为所有数据都被提取并因此无论如何都被编组.

这里也提出类似的问题,但答案对我没有帮助.

UTCTime在使用SQLite时如何在Yesod中使用?

编辑:PersistText \"09:18:07\"错误中提到的是字段默认的值.

sqlite haskell yesod

3
推荐指数
1
解决办法
968
查看次数

使用id参数为处理程序编写Yesod测试用例,其中id是实体的键

我一直在关注yesod教程,我仍然坚持如何构建一个涉及参数的单元测试,该视图也会打到数据库.回溯一点,我按照Echo.hs示例:

    getEchoR :: Text -> Handler Html
    getEchoR theText = do
        defaultLayout $ do
            $(widgetFile "echo")
Run Code Online (Sandbox Code Playgroud)

相应的测试,注意我必须使用Data.Text.pack将参数转换为Text

    yit "Echo some text" $ do
        get $ EchoR $ pack "Hello"
        statusIs 200
Run Code Online (Sandbox Code Playgroud)

现在我的模型定义如下:

Tag
    name Text
    type Text
Run Code Online (Sandbox Code Playgroud)

使用可以呈现的处理程序显然需要TagId作为参数

    getTagR :: TagId -> Handler Html
    getTagR tagId = do
        tag <- runDB $ get404 tagId
        defaultLayout $ do
            setTitle $ toHtml $ tagName tag
            $(widgetFile "tag")
Run Code Online (Sandbox Code Playgroud)

这是测试失败的地方.

    yit "Get a tag" $ do
        -- tagId is undefined
        get $ TagR tagId …
Run Code Online (Sandbox Code Playgroud)

haskell yesod

3
推荐指数
1
解决办法
174
查看次数

Yesod二进制不可用

我从这里安装了Mac OS X Haskell PLatform:

http://www.haskell.org/platform/mac.html

 > which ghc
   /usr/bin/ghc
 > which ghci
   /usr/bin/ghci
 >cabal update
   -----
 >cabal install cabal-install
   -----
 >cabal install yesod
   -----
 >yesod init
   -bash: yesod: command not found
 >which yesod
 >ghc-pkg list
   ....
   yesod-1.2.5.2
   yesod-auth-1.3.0.4
   yesod-core-1.2.13
   yesod-form-1.3.8.2
   yesod-persistent-1.2.2.3
   yesod-routes-1.2.0.6
Run Code Online (Sandbox Code Playgroud)

为什么cabal无法创建yesod二进制文件?如何修复此安装?如何检查yesod的安装位置以手动创建符号链接?

macos haskell cabal yesod

3
推荐指数
1
解决办法
310
查看次数

Yesod 1.2 CSRF保护

我对Yesod的CSRF保护以及Yesod的表格如何运作感到困惑.我的理解是,Yesod的表单系统使用"令牌",它作为隐藏字段传递给表单的HTML实现.处理表单时,将令牌与服务器上存储的(或至少重新创建的)令牌进行比较.我想追踪这一点,因为我的开发环境中虚假地触发了CSRF保护,并且我想改变我的环境,以便表单在开发和生产中的工作方式相同.

那么Yesod的CSRF令牌"依赖于什么"?

haskell csrf yesod

3
推荐指数
1
解决办法
350
查看次数

使用输入表单将数据上载到Yesod服务器

在Yesod中通过自定义输入表单上传文件的正确方法是什么?

我在AngularJS中开发了一个前端,并通过JSON对象将数据传入和传出服务器.但是,上传文件时这不起作用.出于这个原因,我使用了表格.

收集不同的资源我最终得到以下代码.在客户端,我使用以下功能:

this.submitNewMeas = function() {
    var selected_file = document.getElementById('measurements').files[0];
    var fd = new FormData();
    fd.append("measurementsFile", selected_file);

    var response =  $http({
    method: 'POST',
    url: '/measurements/'+this.currMedia.id,
    headers: {
                'Content-Type': 'multipart/form-data'
    },
    data: {
                fd
    },
    transformRequest: formDataObject
    });
    ...
    };
Run Code Online (Sandbox Code Playgroud)

在服务器端,我收到如下数据:

postMeasurementsR :: MediaId -> Handler Value
postMeasurementsR mediaId =  do
result <- runInputPost $ iopt fileField "measurementsFile"
case result of
    Just fileInfo -> do
        saveMeas fileInfo "measDir"

saveMeas :: FileInfo -> FilePath -> HandlerT App IO (FilePath) …
Run Code Online (Sandbox Code Playgroud)

haskell file-upload yesod angularjs

3
推荐指数
1
解决办法
186
查看次数

Yesod的TH生成错误的代码?

我正在创建一个Yesod子网站,并在一些模板Haskell生成的代码中出现类型错误:

Yesod\DataSource\Data.hs:19:1:
Couldn't match type `[Char]' with `Text'
Expected type: () -> ([Text], [(Text, Text)]) -> Maybe (Route DataSource)
  Actual type: () -> ([[Char]], [(Text, Text)]) -> Maybe (Route DataSource)
In the first argument of `\ f_amMs x_amMt -> f_amMs () x_amMt ::
                            forall a_amMu.
                            (() -> ([Text], [(Text, Text)]) -> Maybe (Route a_amMu))
                            -> ([Text], [(Text, Text)]) -> Maybe (Route a_amMu)', namely
  `helper_amMr'
In the expression:
    \ f_amMs x_amMt -> f_amMs () x_amMt ::
      forall a_amMu.
      (() -> ([Text], …
Run Code Online (Sandbox Code Playgroud)

haskell yesod template-haskell

3
推荐指数
1
解决办法
68
查看次数

如何在静态目录下使用图像作为Yesodweb中的背景?

Yesod的新手,我想知道如何使用目录static/img下的图像作为div的背景图像.我使用Scaffolding网站并试过:

.mydiv {
  background-image: url("static/img/bg.jpg");
}
Run Code Online (Sandbox Code Playgroud)

但似乎网址终于改变了http://myhost/tmp/static/img/bg.jpg.

haskell yesod

3
推荐指数
1
解决办法
204
查看次数

Yesod:函数中的非详尽模式是授权的

在Yesod脚手架项目中,我添加了一个新路由和一个新的处理程序.

我的错误如下:

29/Mar/2017:11:25:22 +0200 [Error#yesod-core] Foundation.hs:(137,5)-(144,45): Non-exhaustive patterns in function isAuthorized
 @(yesod-core-1.4.32-6HthMZNCl0sEMRz6GJ4QO1:Yesod.Core.Class.Yesod ./Yesod/Core/Class/Yesod.hs:693:5)
29/Mar/2017:11:25:22 +0200 [Debug#SQL] SELECT `ident`,`password` FROM `user` WHERE `id`=? ; [PersistInt64 1]
Run Code Online (Sandbox Code Playgroud)

我该如何解决?

haskell authorization yesod

3
推荐指数
1
解决办法
174
查看次数