Class \Prado\Web\TUrlMappingPattern
TUrlMappingPattern represents a pattern used to parse and construct URLs. If the currently requested URL matches the pattern, it will alter the THttpRequest parameters. If a constructUrl() call matches the pattern parameters, the pattern will generate a valid URL. In both case, only the PATH_INFO part of a URL is parsed/constructed using the pattern.
To specify the pattern, set the \Prado\Web\setPattern property. \Prado\Web\setPattern takes a string expression with parameter names enclosed between a left brace '{' and a right brace '}'. The patterns for each parameter can be set using \Prado\Web\getParameters attribute collection. For example
<url ... pattern="articles/{year}/{month}/{day}"
parameters.year="\d{4}" parameters.month="\d{2}" parameters.day="\d+" />
In the above example, the pattern contains 3 parameters named "year", "month" and "day". The pattern for these parameters are, respectively, "\d{4}" (4 digits), "\d{2}" (2 digits) and "\d+" (1 or more digits). Essentially, the Parameters attribute name and values are used as substrings in replacing the placeholders in the Pattern string to form a complete regular expression string.
For more complicated patterns, one may specify the pattern using a regular expression by \Prado\Web\setRegularExpression. For example, the above pattern is equivalent to the following regular expression-based pattern:
#^articles/(?P<year>\d{4})/(?P<month>\d{2})\/(?P<day>\d+)$#u
The above regular expression used the "named group" feature available in PHP. If you intended to use the RegularExpression property or regular expressions in CDATA sections, notice that you need to escape the slash, if you are using the slash as regular expressions delimiter.
Thus, only an url that matches the pattern will be valid. For example, a URL http://example.com/index.php/articles/2006/07/21 will match the above pattern, while http://example.com/index.php/articles/2006/07/hello will not since the "day" parameter pattern is not satisfied.
The parameter values are available through the THttpRequest instance (e.g. $this->Request['year']).
The \Prado\Web\setServiceParameter and \Prado\Web\setServiceID (the default ID is 'page') set the service parameter and service id respectively.
Since 3.1.4 you can also use simplyfied wildcard patterns to match multiple ServiceParameters with a single rule. The pattern must contain the placeholder {*} for the ServiceParameter. For example
This rule will match an URL like http://example.com/index.php/admin/edituser and resolve it to the page Application.pages.admin.edituser. The wildcard matching is non-recursive. That means you have to add a rule for every subdirectory you want to access pages in:
It is still possible to define an explicit rule for a page in the wildcard path. This rule has to preceed the wildcard rule.
You can also use parameters with wildcard patterns. The parameters are then available with every matching page:
To enable automatic parameter encoding in a path format from wildcard patterns you can set UrlFormat to 'Path':
This will create and parse URLs of the form .../index.php/admin/listuser/param1/value1/param2/value2.
Use to define another separator character between parameter name and value. Parameter/value pairs are always separated by a '/'.
.../index.php/admin/listuser/param1-value1/param2-value2.
Since 3.2.2 you can also add a list of "constants" parameters that can be used just like the original "parameters" parameters, except that the supplied value will be treated as a simple string constant instead of a regular expression. For example
These rules, when matched by the actual request, will make the application see a "lisstype" parameter present (even through not supplied in the request) and equal to "detailed" or "summarized", depending on the friendly url matched. The constants is practically a table-based validation and translation of specified, fixed-set parameter values.
Class hierarchy
Author: Wei Zhuo <weizhuo[at]gmail[dot]com>Since: 3.0.5
public
|
|
public
|
constructUrl(array<string|int, mixed> $getItems, bool $encodeAmpersand, bool $encodeGetItems) : string
Constructs a URL using this pattern.
|
public
|
|
public
|
|
public
|
getEnableCustomUrl() : bool
Returns a value indicating whether to use this pattern to construct URL.
|
public
|
|
public
|
|
public
|
|
public
|
|
public
|
getPatternMatches(THttpRequest $request) : array<string|int, mixed>
Uses URL pattern (or full regular expression if available) to
match the given url path.
|
public
|
|
public
|
|
public
|
|
public
|
|
public
|
|
public
|
|
public
|
|
public
|
|
public
|
setEnableCustomUrl(bool $value) : mixed
Sets a value indicating whether to enable custom constructUrl using this pattern
|
public
|
|
public
|
|
public
|
|
public
|
|
public
|
|
public
|
|
public
|
setUrlFormat(THttpRequestUrlFormat $value) : mixed
Sets the format of URLs constructed and interpreted by this pattern.
A Get URL format is like index.php?name1=value1&name2=value2 while a Path URL format is like index.php/name1/value1/name2/value. The separating character between name and value can be configured with setUrlParamSeparator and defaults to '/'. Changing the UrlFormat will affect constructUrl and how GET variables are parsed. |
public
|
|
public
|
|
protected
|
applySecureConnectionPrefix(string $url) : string
Apply behavior of {@see SecureConnection} property by conditionaly prefixing
URL with {@see \Prado\Web\THttpRequest::getBaseUrl()}
|
protected
|
getParameterizedPattern() : string
Substitute the parameter key value pairs as named groupings
in the regular expression matching pattern.
|
\Prado\TComponent::GLOBAL_RAISE_EVENT_LISTENER |