Vibe.d基本表单验证

时间:2017-09-25 14:34:45

标签: validation d vibed

我有一个post create方法:

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");
    }
}

我想进行基本的表单验证。例如,如果输入字段为空,则会重定向到上一页。

我想我应该向create方法传递一些错误信息,比如 baslik字段不应为空等。

但是因为我对框架很陌生,所以我不应该弄明白。框架是否有任何设施可用于表单验证。

1 个答案:

答案 0 :(得分: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参数。自动类型转换发生(例如转移到int)并导致异常,然后在getError方法中处理。

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

    auto router = new URLRouter;
    router.registerWebInterface(new Gönderiyi);
    
  6. 您应该查看the documentation of errorDisplayweb framework example from vibe.d