CppCMS 1.2 URL Dispatching
CppCMS 1.1 introduced improved url dispatching methods url_dispatcher::map. Following improvements provided over current url_dispatcher::assign
- It is possible to specify HTTP Request Method to map the function to - to support RESTful services in more friendly way
- It is possible to use non
std::stringparameters with automatic conversion and validation usingstd::istream - It validates encoding of every matched expression that passed as a parameter
- It allows to pass
booster::regexobject with non-default flags as URL filter.
For example:
class my_app : public cppcms::application{
public:
// ordinary API
// name - is validated for correct encoding
// id converted from string
void page(int id,std::string const &name);
// RESTful API
void new_todo()
void get_todo(int id);
void update_todo(int id);
...
my_app(...)
{
dispatcher().map("/page/(\\d+)(/(.*))?",
&my_app::page,this,1,3);
dispatcher().map("GET","/todo/(\\d+)",
&my_app::get_todo,this,1);
dispatcher().map("PUT","/todo/(\\d+)",
&my_app::update_todo,this,1);
dispatcher().map("POST","/todo",
&my_app::new_todo,this);
}
};
It is also possible to pass booster::regex object so additional options can be specified:
For example for a function:
void article(std::string const &first_char,std::string const &full_name);
We can specify complex regular expression:
using booster::regex;
dispatcher().map(
booster::regex("/page/((.).*)",regex::icase | regex::utf8),
&my_app::article,this,2,1);
So it would match both "/Page/русский" and "/page/русский" and also select a first UTF-8 character "р" properly.
