const classafBedSheet::Route
sys::Obj afBedSheet::Route
Matches uri paths to request handler methods. Any remaining path segments are converted into method arguments. Use * to capture (non-greedy) method arguments, ** to capture all remaining path segments and *** to capture the remaining url. Examples:
glob pattern uri arguments -------------------------------------------- /user/* --> /user/ => null /user/* --> /user/42 => "42" /user/* --> /user/42/ => no match /user/* --> /user/42/dee => no match /user/*/* --> /user/ => no match /user/*/* --> /user/42 => no match /user/*/* --> /user/42/ => "42", null /user/*/* --> /user/42/dee => "42", "dee" /user/** --> /user/ => null /user/** --> /user/42 => "42" /user/** --> /user/42/ => "42" /user/** --> /user/42/dee => "42", "dee" /user/*** --> /user/ => null /user/*** --> /user/42 => "42" /user/*** --> /user/42/ => "42/" /user/*** --> /user/42/dee => "42/dee"
The argument list is then matched to the method parameters, taking into account nullable types and default values. Examples:
method params arguments match -------------------------------------------------- Str a, Str b --> => no match Str a, Str b --> null => no match Str a, Str b --> null, null => no match Str a, Str b --> "wot", "ever" => match Str? a, Str? b --> => no match Str? a, Str? b --> null => no match Str? a, Str? b --> null, null => match Str? a, Str? b --> "wot", "ever" => match Str? a, Str? b := "" --> => no match Str? a, Str? b := "" --> null => match Str? a, Str? b := "" --> null, null => match Str? a, Str? b := "" --> "wot", "ever" => match Str? a, Str b := "" --> => no match Str? a, Str b := "" --> null => match Str? a, Str b := "" --> null, null => no match Str? a, Str b := "" --> "wot", "ever" => match
Method parameters can be any Obj (and not just Str) as they are converted using the ValueEncoder service.
TIP: Contribute
ValueEncodersto convert path segments into Entities. This means BedSheet can call handlers with real entities, not just str IDs!
Parameters of type Str[] are capture all parameters and match the remaining uri (split on /).
Request uri's (for matching purposes) are treated as case-insensitive.
Use ? to optional match the last character. Use to optionally match a trailing slash. e.g.
glob uri ----------------------------- /index/? --> /index => match /index/? --> /index/ => match vs /index/ --> /index => no match /index --> /index/ => no match
If a handler class is a service, it is obtained from the IoC registry, otherwise it is autobuilt. If the class is const, the instance is cached for future use.
- httpMethod
- const Str httpMethod- HTTP method used for this route 
- makeFromGlob
- new makeFromGlob(Uri glob, Obj response, Str httpMethod := "GET")- Make a Route that matches on the given glob pattern. - globmust start with a slash "/"- httpMethodmay be a glob. Example, use "*" to match all methods.
- makeFromRegex
- new makeFromRegex(Regex uriRegex, Obj response, Str httpMethod := "GET", Bool matchAllSegs := false)- For hardcore users; make a Route from a regex. Capture groups are used to match arguments. Example: - Route(Regex<|(?i)^\/index\/(.*?)$|>, #foo, "GET", true) -> Route(`/index/**`) - Set - matchAllSegsto- trueto have the last capture group mimic the glob- **operator, splitting on "/" to match all remaining segments.
- match
- Obj? match(Uri uri, Str httpMethod)- Returns a response object should the given uri (and http method) match this route. Returns - nullif not.
- response
- const Obj response- The response to be returned from this route. 
- routeRegex
- const Regex routeRegex- The uri regex this route matches. 
- toStr
- virtual override Str toStr()