0

我有一个后期创建方法:

void gönderiyiOluştur(HTTPServerRequest istek, HTTPServerResponse yanıt)
{
    render!("gönderiler/oluştur.dt")(yanıt);
}

和这样的后存储方法:

void gönderiyiKaydet(HTTPServerRequest istek, HTTPServerResponse yanıt)
{
    auto başlık = istek.form["baslik"];
    auto içerik = istek.form["icerik"];

    bool yayınla = false;

    if (başlık.length > 0)
    {

        Gönderi gönderi = Gönderi(başlık, içerik);

        gönderi.kaydet();
        yanıt.redirect("/");
    }
    else
    {
        yanıt.redirect("/gönderiler/oluştur");
    }
}

我想做基本的表单验证。例如,如果输入字段为空,它将重定向到上一页。

我想我应该将一些错误消息传递给创建方法,例如baslik 字段不应该为空等

但是由于我对框架很陌生,所以我不应该弄清楚。该框架是否为表单验证提供了任何工具。

4

1 回答 1

1

当您使用 vibe.d 中的 Web 框架时,基本的表单验证很容易。基本步骤是:

  1. 创建一个类Gönderiyi并将你的kaydet方法放在这个类中:

    class Shipment {
        @method(HTTPMethod.POST)
        void kaydet() { ... }
    }
    
  2. 在类中定义一个方法,以防验证失败。此方法应显示错误消息:

    void getError(string _error = null, HTTPServerResponse res) { ... }
    
  3. 用属性注解kaydet方法,@errorDisplay将方法与错误函数联系起来:

    class Shipment {
        @method(HTTPMethod.POST)
        @errorDisplay!getError
        void kaydet() { ... }
        void getError(string _error = null, HTTPServerResponse res) { ... }
    }
    
  4. 现在在kaydet方法内部进行验证,并在发生错误时抛出异常。然后自动调用该getError方法。您也可以利用参数绑定和转换。当 D 参数名称与 HTML 输入值的名称相同时,该值将绑定到 D 参数。发生自动类型转换(例如 to int)并可能导致异常,然后在getError方法中处理这些异常。

  5. 作为最后一步,您需要使用 Web 框架注册您的类:

    auto router = new URLRouter;
    router.registerWebInterface(new Gönderiyi);
    

您还应该查看errorDisplay 的文档和 vibe.d中的Web 框架示例

于 2017-10-05T05:54:21.223 回答