MediaWiki  master
PathRouter Class Reference

PathRouter class. More...

Public Member Functions

 add ( $path, $params=[], $options=[])
 Add a new path pattern to the path router. More...
 
 addStrict ( $path, $params=[], $options=[])
 Add a new path pattern to the path router with the strict option on. More...
 
 parse ( $path)
 Parse a path and return the query matches for the path. More...
 
 validateRoute ( $path, $varName)
 

Static Public Member Functions

static getActionPaths (array $actionPaths, $articlePath)
 

Protected Member Functions

 doAdd ( $path, $params, $options, $key=null)
 Protected helper to do the actual bulk work of adding a single pattern. More...
 
 internalParse ( $path)
 Match a path against each defined pattern. More...
 
 sortByWeight ()
 Protected helper to re-sort our patterns so that the most specific (most heavily weighted) patterns are at the start of the array. More...
 

Static Protected Member Functions

static expandParamValue ( $pathMatches, $key, $value)
 Replace $key etc. More...
 
static extractTitle ( $path, $pattern)
 
static makeWeight ( $pattern)
 

Private Attributes

array $patterns = []
 

Detailed Description

PathRouter class.

This class can take patterns such as /wiki/$1 and use them to parse query parameters out of REQUEST_URI paths.

$router->add( "/wiki/$1" );

  • Matches /wiki/Foo style urls and extracts the title $router->add( [ 'edit' => "/edit/$key" ], [ 'action' => '$key' ] );
  • Matches /edit/Foo style urls and sets action=edit $router->add( '/$2/$1', [ 'variant' => '$2' ], [ '$2' => [ 'zh-hant', 'zh-hans' ] ] );
  • Matches /zh-hant/Foo or /zh-hans/Foo $router->addStrict( "/foo/Bar", [ 'title' => 'Baz' ] );
  • Matches /foo/Bar explicitly and uses "Baz" as the title $router->add( '/help/$1', [ 'title' => 'Help:$1' ] );
  • Matches /help/Foo with "Help:Foo" as the title $router->add( '/$1', [ 'foo' => [ 'value' => 'bar$2' ] ] );
  • Matches /Foo and sets 'foo' to 'bar$2' without $2 being replaced $router->add( '/$1', [ 'data:foo' => 'bar' ], [ 'callback' => 'functionname' ] );
  • Matches /Foo, adds the key 'foo' with the value 'bar' to the data array and calls functionname( &$matches, $data );

Path patterns:

  • Paths may contain $# patterns such as $1, $2, etc...
  • $1 will match 0 or more while the rest will match 1 or more
  • Unless you use addStrict "/wiki" and "/wiki/" will be expanded to "/wiki/$1"

Params:

  • In a pattern $1, $2, etc... will be replaced with the relevant contents
  • If you used a keyed array as a path pattern, $key will be replaced with the relevant contents
  • The default behavior is equivalent to `[ 'title' => '$1' ], if you don't want the title parameter you can explicitly use[ 'title' => false ]`
  • You can specify a value that won't have replacements in it using `'foo' => [ 'value' => 'bar' ];`

Options:

  • The option keys $1, $2, etc... can be specified to restrict the possible values of that variable. A string can be used for a single value, or an array for multiple.
  • When the option key 'strict' is set (Using addStrict is simpler than doing this directly) the path won't have $1 implicitly added to it.
  • The option key 'callback' can specify a callback that will be run when a path is matched. The callback will have the arguments ( &$matches, $data ) and the matches array can be modified.
Since
1.19
Author
Daniel Friesen

Definition at line 73 of file PathRouter.php.

Member Function Documentation

◆ add()

PathRouter::add (   $path,
  $params = [],
  $options = [] 
)

Add a new path pattern to the path router.

Parameters
string | array$pathThe path pattern to add
array$paramsThe params for this path pattern
array$optionsThe options for this path pattern

Definition at line 158 of file PathRouter.php.

References $path, and doAdd().

Referenced by addStrict(), and WebRequest\getPathInfo().

◆ addStrict()

PathRouter::addStrict (   $path,
  $params = [],
  $options = [] 
)

Add a new path pattern to the path router with the strict option on.

See also
self::add
Parameters
string | array$path
array$params
array$options

Definition at line 194 of file PathRouter.php.

References $path, and add().

◆ doAdd()

PathRouter::doAdd (   $path,
  $params,
  $options,
  $key = null 
)
protected

Protected helper to do the actual bulk work of adding a single pattern.

This is in a separate method so that add() can handle the difference between a single string $path and an array $path that contains multiple path patterns each with an associated $key to pass on.

Parameters
string$path
array$params
array$options
null | string$key

Definition at line 90 of file PathRouter.php.

References $path.

Referenced by add().

◆ expandParamValue()

static PathRouter::expandParamValue (   $pathMatches,
  $key,
  $value 
)
staticprotected

Replace $key etc.

in param values with the matched strings from the path.

Parameters
array$pathMatchesThe match results from the path
string | null$keyThe key of the matching pattern
string$valueThe param value to be expanded
Returns
string|false

Definition at line 392 of file PathRouter.php.

◆ extractTitle()

static PathRouter::extractTitle (   $path,
  $pattern 
)
staticprotected
Parameters
string$path
object$pattern
Returns
array|null

Definition at line 298 of file PathRouter.php.

References $matches, and $path.

◆ getActionPaths()

static PathRouter::getActionPaths ( array  $actionPaths,
  $articlePath 
)
static

Definition at line 430 of file PathRouter.php.

Referenced by Title\getLocalURL(), and WebRequest\getPathInfo().

◆ internalParse()

PathRouter::internalParse (   $path)
protected

Match a path against each defined pattern.

Parameters
string$path
Returns
array|null

Definition at line 281 of file PathRouter.php.

References $matches, and $path.

Referenced by parse().

◆ makeWeight()

static PathRouter::makeWeight (   $pattern)
staticprotected
Parameters
object$pattern
Returns
float|int

Definition at line 215 of file PathRouter.php.

References $path.

◆ parse()

PathRouter::parse (   $path)

Parse a path and return the query matches for the path.

Parameters
string$pathThe path to parse
Returns
array The array of matches for the path

Definition at line 255 of file PathRouter.php.

References $matches, $path, internalParse(), sortByWeight(), and wfRemoveDotSegments().

◆ sortByWeight()

PathRouter::sortByWeight ( )
protected

Protected helper to re-sort our patterns so that the most specific (most heavily weighted) patterns are at the start of the array.

Definition at line 203 of file PathRouter.php.

Referenced by parse().

◆ validateRoute()

PathRouter::validateRoute (   $path,
  $varName 
)

Definition at line 175 of file PathRouter.php.

References $path.

Member Data Documentation

◆ $patterns

array PathRouter::$patterns = []
private

Definition at line 78 of file PathRouter.php.


The documentation for this class was generated from the following file: