0

cppcms::form から継承するクラスを使用せずに、純粋な html ファイルから POST フィールドを取得する方法を知りたいです。たとえば、次のクラスを実装するクラスが必要です。

std::string Index::main(const std::string &url, const std::map<std::string, std::string> parameters)
{
 std::string out = (
        "<html>\n"
        "<body>\n"
        "<form name='test' action='' method='post'>"
        "<h1>Hello, put your name here:</h1><br />"
        "<input type='text' name='user'>"
        "<input type='submit' value='Submit'>"
        "</form>"
        "</body>\n"
        "</html>\n"
 );

  return out;
}

このメソッドは、cppcms::application を継承するクラスで呼び出されます。

void Engine::main(const std::string &url)
{
   std::map<std::string, std::string> params;

   pages["/"] = boost::bind(&Index::main, boost::shared_ptr<Index>(new Index), _1, _2);
   std::string out = pages[url](url, params); // Call to Index::main

   response().out() << out;
 }

私がしたいのは、「user」フィールドを取得して「params」マップに配置することです。Index クラスを cppcms::form から継承させたり、「post」内で「get」メソッドを使用したりする必要はありません。私は、html ファイル/クラスを cppcms フレームワークから完全に独立させたいと考えています。出来ますか?ありがとうございました。

4

1 に答える 1

0

自動フォーム (HTML) 生成を使用しない場合でも、cppcms::forms を使用したい場合。

なんで?多くの正当な理由: CSRF の検証、エンコーディングの検証、さまざまな設定の検証など。

cppcms::form::widgetsクラスで username.name("user") のような必要なパラメーターを設定できますが、フォーム フレームワークは引き続き使用できます。

cppcms::widgets::text username;
username.name("user");
// validation - what you need
username.non_empty()

// single widget loading
username.load(context());
if(username.validate()) {
   myname=username.value();
}

// better as you can handle several widgets at once
cppcms::form frm;
frm.add(username);
...
frm.load(context())
if(frm.validate()) {
  ...
  myname=username.value();
}
于 2013-11-24T08:20:42.673 に答える