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::string
parameters with automatic conversion and validation usingstd::istream
- It validates encoding of every matched expression that passed as a parameter
- It allows to pass
booster::regex
object 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.