const classafBedSheet::Route
sys::Obj afBedSheet::Route
Matches uri paths to request handler methods, converting any remaining path segments 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/ => "" /user/* --> /user/42 => "42" /user/* --> /user/42/dee => no match /user/*/* --> /user/ => no match /user/*/* --> /user/42 => no match /user/*/* --> /user/42/dee => "42", "dee" /user/** --> /user/ => "" /user/** --> /user/42 => "42" /user/** --> /user/42/dee => "42", "dee" /user/*** --> /user/ => "" /user/*** --> /user/42 => "42" /user/*** --> /user/42/dee => "42/dee"
Method arguments with default values are mapped to optional path segments. Use ** to capture optional segments in the uri. Example:
using afBedSheet
using afIoc
class AppModule {
@Contribute
static Void contributeRoutes(OrderedConfig conf) {
conf.add(Route(`/hello/**`, HelloPage#hello))
}
}
class HelloPage {
Text hello(Str name, Int iq := 666) {
return Text.fromPlain("Hello! I'm $name and I have an IQ of $iq!")
}
}
'/hello/Traci/69' => helloPage.hello("Traci", 69) => "Hello! I'm Traci and I have an IQ of 69"
'hello/Luci' => helloPage.hello("Luci") => "Hello! I'm Luci and I have an IQ of 666"
'dude/' => no match
'hello/' => no match
'hello/1/2/3 => no match
Path segments are converted to Objs via the ValueEncoder service.
TIP: Contribute
ValueEncodersto convert path segments into Entities. BedSheet can then 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. In the example above, both
hello/LuciandHELLO/Luci
would be matched.
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.
Note: There is no special handling for nullable types in handler method arguments as BedSheet can not determine when null is a suitable replacement for an empty str. Instead contribute a ValueEncoder or use default values.
- handler
const Method handlerMethod handler for this route.
- httpMethod
const Str httpMethodHTTP method used for this route
- makeFromGlob
new makeFromGlob(Uri glob, Method handler, 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, Method handler, Str httpMethod := "GET", Bool matchRemaining := 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
matchRemainingtotrueto have the last capture group mimic the glob**operator, splitting on "/" to match all remaining segments.- routeRegex
const Regex routeRegexThe uri regex this route matches.
- toStr
virtual override Str toStr()