Methods summary
public static
MvcCore\Router
|
#
GetInstance( array $routes = [], boolean $autoInitialize = TRUE )
Get singleton instance of \MvcCore\Router stored always here.
Optionally set routes as first argument.
Create proper router instance type at first time by
configured class name in \MvcCore\Application singleton.
Get singleton instance of \MvcCore\Router stored always here.
Optionally set routes as first argument.
Create proper router instance type at first time by
configured class name in \MvcCore\Application singleton.
Routes could be defined in various forms:
Example:
\MvcCore\Router::GetInstance([ "Products:List" => "/products-list/<name>/<color>",
]);
or:
\MvcCore\Router::GetInstance([ 'products_list' => [ "pattern" => "/products-list/<name>/<color>", "controllerAction" => "Products:List", "defaults" => ["name" => "default-name", "color" => "red"], "constraints" => ["name" => "[^/]*", "color" => "[a-z]*"] ]
]);
or:
\MvcCore\Router::GetInstance([ new Route( "/products-list/<name>/<color>", "Products:List", ["name" => "default-name", "color" => "red"], ["name" => "[^/]*", "color" => "[a-z]*"] )
]);
or:
\MvcCore\Router::GetInstance([ new Route( "name" => "products_list", "pattern" => "#^/products\-list/(?<name>[^/]*)/(?<color>[a-z]*)(?=/$|$)#", "reverse" => "/products-list/<name>/<color>", "controller" => "Products", "action" => "List", "defaults" => ["name" => "default-name", "color" => "red"], )
]);
Parameters
- $routes
Keyed array with routes, keys are route names or route
Controller::Action definitions.
- $autoInitialize
If TRUE , locale routes array is cleaned and then all
routes (or configuration arrays) are sent into method
$router->AddRoutes(); , where are routes auto initialized
for missing route names or route controller or route action
record, completed always from array keys. You can you
FALSE to set routes without any change or
auto-initialization, it could be useful to restore cached
routes etc.
Returns
|
public
MvcCore\Router
|
#
SetRoutes( MvcCore\Route[] |array $routes = [], string|null $autoInitialize = TRUE, boolean $autoInitialize,… )
Clear all possible previously configured routes
and set new given request routes again.
If there is no name configured in route array configuration,
set route name by given $routes array key, if key is not numeric.
Clear all possible previously configured routes
and set new given request routes again.
If there is no name configured in route array configuration,
set route name by given $routes array key, if key is not numeric.
Routes could be defined in various forms:
Example:
\MvcCore\Router::GetInstance()->SetRoutes([ "Products:List" => "/products-list/<name>/<color>",
]);
or:
\MvcCore\Router::GetInstance()->SetRoutes([ 'products_list' => [ "pattern" => "/products-list/<name>/<color>", "controllerAction" => "Products:List", "defaults" => ["name" => "default-name", "color" => "red"], "constraints" => ["name" => "[^/]*", "color" => "[a-z]*"] ]
]);
or:
\MvcCore\Router::GetInstance()->SetRoutes([ new Route( "/products-list/<name>/<color>", "Products:List", ["name" => "default-name", "color" => "red"], ["name" => "[^/]*", "color" => "[a-z]*"] )
]);
or:
\MvcCore\Router::GetInstance()->SetRoutes([ new Route( "name" => "products_list", "pattern" => "#^/products\-list/(?<name>[^/]*)/(?<color>[a-z]*)(?=/$|$)#", "reverse" => "/products-list/<name>/<color>", "controller" => "Products", "action" => "List", "defaults" => ["name" => "default-name", "color" => "red"], )
]);
Parameters
- $routes
Keyed array with routes, keys are route names or route
Controller::Action definitions.
- $autoInitialize
$groupName
Group name is first matched/parsed word in requested path to
group routes by to try to match only routes you really need,
not all of them. If NULL by default, routes are inserted
into default group.
- $autoInitialize,…
If TRUE , locale routes array is cleaned and then all
routes (or configuration arrays) are sent into method
$router->AddRoutes(); , where are routes auto initialized
for missing route names or route controller or route action
record, completed always from array keys. You can you FALSE
to set routes without any change or auto-initialization, it
could be useful to restore cached routes etc.
Returns
|
public
MvcCore\Router
|
#
AddRoutes( array $routes = [], string|null $prepend = FALSE, boolean $throwExceptionForDuplication = TRUE, boolean $throwExceptionForDuplication,… )
Append or prepend new request routes.
If there is no name configured in route array configuration,
set route name by given $routes array key, if key is not numeric.
Append or prepend new request routes.
If there is no name configured in route array configuration,
set route name by given $routes array key, if key is not numeric.
Routes could be defined in various forms:
Example:
\MvcCore\Router::GetInstance()->AddRoutes([ "Products:List" => "/products-list/<name>/<color>",
]);
or:
\MvcCore\Router::GetInstance()->AddRoutes([ 'products_list' => [ "pattern" => "/products-list/<name>/<color>", "controllerAction" => "Products:List", "defaults" => ["name" => "default-name", "color" => "red"], "constraints" => ["name" => "[^/]*", "color" => "[a-z]*"] ]
]);
or:
\MvcCore\Router::GetInstance()->AddRoutes([ new Route( "/products-list/<name>/<color>", "Products:List", ["name" => "default-name", "color" => "red"], ["name" => "[^/]*", "color" => "[a-z]*"] )
]);
or:
\MvcCore\Router::GetInstance()->AddRoutes([ new Route( "name" => "products_list", "pattern" => "#^/products\-list/(?<name>[^/]*)/(?<color>[a-z]*)(?=/$|$)#", "reverse" => "/products-list/<name>/<color>", "controller" => "Products", "action" => "List", "defaults" => ["name" => "default-name", "color" => "red"], )
]);
Parameters
- $routes
Keyed array with routes, keys are route names or route
Controller::Action definitions.
- $prepend
$groupName
Group name is first matched/parsed word in requested path to
group routes by to try to match only routes you really need,
not all of them. If NULL by default, routes are inserted
into default group.
- $throwExceptionForDuplication
$prepend
Optional, if TRUE , all given routes will be prepended from
the last to the first in given list, not appended.
- $throwExceptionForDuplication,…
TRUE by default. Throw an exception, if route name or
route Controller:Action has been defined already. If
FALSE old route is over-written by new one.
Returns
|
public
MvcCore\Router
|
#
AddRoute( MvcCore\Route |array $routeCfgOrRoute, string|null $groupName = NULL, boolean $prepend = FALSE, boolean $throwExceptionForDuplication = TRUE )
Append or prepend new request route.
Set up route by route name into \MvcCore\Router::$routes array
to route incoming request and also set up route by route name and
by Controller:Action combination into \MvcCore\Router::$urlRoutes
array to build URL addresses.
Append or prepend new request route.
Set up route by route name into \MvcCore\Router::$routes array
to route incoming request and also set up route by route name and
by Controller:Action combination into \MvcCore\Router::$urlRoutes
array to build URL addresses.
Route could be defined in various forms:
Example:
\MvcCore\Router::GetInstance()->AddRoute([ "name" => "Products:List", "pattern" => "/products-list/<name>/<color>",
]);
or:
\MvcCore\Router::GetInstance()->AddRoute([ "name" => "products_list", "pattern" => "/products-list/<name>/<color>", "controllerAction" => "Products:List", "defaults" => ["name" => "default-name", "color" => "red"], "constraints" => ["name" => "[^/]*", "color" => "[a-z]*"]
]);
or:
\MvcCore\Router::GetInstance()->AddRoute(new Route( "/products-list/<name>/<color>", "Products:List", ["name" => "default-name", "color" => "red"], ["name" => "[^/]*", "color" => "[a-z]*"]
));
or:
\MvcCore\Router::GetInstance()->AddRoute(new Route( "name" => "products_list", "pattern" => "#^/products\-list/(?<name>[^/]*)/(?<color>[a-z]*)(?=/$|$)#", "reverse" => "/products-list/<name>/<color>", "controller" => "Products", "action" => "List", "defaults" => ["name" => "default-name", "color" => "red"],
));
Parameters
- $routeCfgOrRoute
- Route instance or route config array.
- $groupName
Group name is first matched/parsed word in requested path to
group routes by to try to match only routes you really need,
not all of them. If NULL by default, routes are inserted
into default group.
- $prepend
Optional, if TRUE , given route will be prepended,
not appended.
- $throwExceptionForDuplication
TRUE by default. Throw an exception, if route name or
route Controller:Action has been defined already. If
FALSE old route is over-written by new one.
Returns
|
public
boolean
|
#
HasRoute( string|MvcCore\Route $routeOrRouteName )
Get TRUE if router has any route by given route name or FALSE if not.
Get TRUE if router has any route by given route name or FALSE if not.
Parameters
Returns
boolean
|
public
MvcCore\Route |null
|
#
RemoveRoute( string $routeName )
Remove route from router by given name and return removed route instance.
If router has no route by given name, NULL is returned.
Remove route from router by given name and return removed route instance.
If router has no route by given name, NULL is returned.
Parameters
Returns
|
public
MvcCore\Route |null
|
#
GetRoute( $routeName )
Get configured \MvcCore\Route route instances by route name,
NULL if no route presented.
Get configured \MvcCore\Route route instances by route name,
NULL if no route presented.
Returns
|
public
MvcCore\Route[]
|
#
GetRoutes( string|null $groupName,… )
Get all configured route(s) as \MvcCore\Route instances.
Keys in returned array are route names, values are route objects.
Get all configured route(s) as \MvcCore\Route instances.
Keys in returned array are route names, values are route objects.
Parameters
- $groupName,…
Group name is first matched/parsed word in requested path to
group routes by to try to match only routes you really need,
not all of them. If NULL by default, there are returned
all routes from all groups.
Returns
|
public
MvcCore\Request
|
#
GetRequest( )
Get \MvcCore\Request object as reference, used internally for:
- Routing process in \MvcCore\Router::Route(); and it's protected
sub-methods.
- URL addresses completing in \MvcCore\Router::Url() and it's protected
sub-methods.
Get \MvcCore\Request object as reference, used internally for:
- Routing process in \MvcCore\Router::Route(); and it's protected sub-methods.
- URL addresses completing in \MvcCore\Router::Url() and it's protected sub-methods.
Returns
|
public
MvcCore\Router
|
#
SetRequest( MvcCore\IRequest $request )
Sets up \MvcCore\Request object as reference to use it internally for:
- Routing process in \MvcCore\Router::Route(); and it's protected
sub-methods.
- URL addresses completing in \MvcCore\Router::Url() and it's protected
sub-methods.
This is INTERNAL, not TEMPLATE method, internally called in
\MvcCore\Application::Run(); => \MvcCore\Application::routeRequest(); .
Sets up \MvcCore\Request object as reference to use it internally for:
- Routing process in \MvcCore\Router::Route(); and it's protected sub-methods.
- URL addresses completing in \MvcCore\Router::Url() and it's protected sub-methods.
This is INTERNAL, not TEMPLATE method, internally called in
\MvcCore\Application::Run(); => \MvcCore\Application::routeRequest(); .
Parameters
Returns
|
public
MvcCore\Router
|
#
SetRouteByQueryString( boolean|null $routeByQueryString = TRUE )
Set hardly routing strategy. If this method is configures with TRUE
value, it disables whole routing by rewrite routes and only query string
values with controller and action are used. If this method is configures
with FALSE value, there are used only rewrite routes routing and no
query string data. this method is highly advanced.
Set hardly routing strategy. If this method is configures with TRUE
value, it disables whole routing by rewrite routes and only query string
values with controller and action are used. If this method is configures
with FALSE value, there are used only rewrite routes routing and no
query string data. this method is highly advanced.
Parameters
Returns
|
public
boolean|null
|
#
GetRouteByQueryString( )
Get routing strategy. TRUE means that there was automatically or
manually chosen routing by query string values and FALSE means that
there was chosen routing by rewrite routes.
Get routing strategy. TRUE means that there was automatically or
manually chosen routing by query string values and FALSE means that
there was chosen routing by rewrite routes.
Returns
boolean|null
|
public
MvcCore\Router
|
#
SetCurrentRoute( MvcCore\IRoute $currentRoute )
Set matched route instance for given request object
into \MvcCore\Route::Route(); method. Currently matched
route is always assigned internally in that method.
Set matched route instance for given request object
into \MvcCore\Route::Route(); method. Currently matched
route is always assigned internally in that method.
Parameters
Returns
|
public
MvcCore\Route
|
#
GetCurrentRoute( )
Get matched route instance reference for given request object
into \MvcCore\Route::Route($request); method. Currently
matched route is always assigned internally in that method.
Get matched route instance reference for given request object
into \MvcCore\Route::Route($request); method. Currently
matched route is always assigned internally in that method.
Returns
|
public
boolean
|
#
GetRouteToDefaultIfNotMatch( )
Get TRUE if request has to be automatically dispatched as default
Index:Index route, if there was no route matching current request
and if request was not / (homepage) but /something-more .
Default protected property value: FALSE .
Get TRUE if request has to be automatically dispatched as default
Index:Index route, if there was no route matching current request
and if request was not / (homepage) but /something-more .
Default protected property value: FALSE .
Returns
boolean
|
public
MvcCore\Router
|
#
SetRouteToDefaultIfNotMatch( boolean $enable = TRUE )
Set TRUE if request has to be automatically dispatched as default
Index:Index route, if there was no route matching current request
and if request was not / (homepage) but /something-more .
Default protected property value: FALSE .
Set TRUE if request has to be automatically dispatched as default
Index:Index route, if there was no route matching current request
and if request was not / (homepage) but /something-more .
Default protected property value: FALSE .
Parameters
Returns
|
public
array
&
|
#
GetDefaultParams( )
Get default request params - default params to build URL with possibility
to define custom records for filter functions.
Be careful, it could contain XSS chars. Use always htmlspecialchars() .
Get default request params - default params to build URL with possibility
to define custom records for filter functions.
Be careful, it could contain XSS chars. Use always htmlspecialchars() .
Returns
array
|
public
array
&
|
#
GetRequestedParams( )
Get all request params - params parsed by route and query string params.
Be careful, it could contain XSS chars. Use always htmlspecialchars() .
Get all request params - params parsed by route and query string params.
Be careful, it could contain XSS chars. Use always htmlspecialchars() .
Returns
array
|
public
integer
|
#
GetTrailingSlashBehaviour( )
Get trailing slash behaviour - integer state about what to do with
trailing slash in all requested URL except homepage. Possible states are:
- -1 (\MvcCore\IRouter::TRAILING_SLASH_REMOVE )
Always remove trailing slash from requested URL if there
is any and redirect to it, except homepage.
- 0 (\MvcCore\IRouter::TRAILING_SLASH_BENEVOLENT )
Be absolutely benevolent for trailing slash in requested url.
- 1 (\MvcCore\IRouter::TRAILING_SLASH_ALWAYS )
Always keep trailing slash in requested URL or always add trailing
slash into URL and redirect to it.
Default value is -1 - \MvcCore\IRouter::TRAILING_SLASH_REMOVE
Get trailing slash behaviour - integer state about what to do with
trailing slash in all requested URL except homepage. Possible states are:
- -1 (\MvcCore\IRouter::TRAILING_SLASH_REMOVE ) Always remove trailing slash from requested URL if there is any and redirect to it, except homepage.
- 0 (\MvcCore\IRouter::TRAILING_SLASH_BENEVOLENT ) Be absolutely benevolent for trailing slash in requested url.
- 1 (\MvcCore\IRouter::TRAILING_SLASH_ALWAYS ) Always keep trailing slash in requested URL or always add trailing slash into URL and redirect to it.
Default value is -1 - \MvcCore\IRouter::TRAILING_SLASH_REMOVE
Returns
integer
|
public
MvcCore\Router
|
#
SetTrailingSlashBehaviour( integer $trailingSlashBehaviour = -1 )
Set trailing slash behaviour - integer state about what to do with
trailing slash in all requested URL except homepage. Possible states are:
- -1 (\MvcCore\IRouter::TRAILING_SLASH_REMOVE )
Always remove trailing slash from requested URL if there
is any and redirect to it, except homepage.
- 0 (\MvcCore\IRouter::TRAILING_SLASH_BENEVOLENT )
Be absolutely benevolent for trailing slash in requested url.
- 1 (\MvcCore\IRouter::TRAILING_SLASH_ALWAYS )
Always keep trailing slash in requested URL or always add trailing
slash into URL and redirect to it.
Default value is -1 - \MvcCore\IRouter::TRAILING_SLASH_REMOVE
Set trailing slash behaviour - integer state about what to do with
trailing slash in all requested URL except homepage. Possible states are:
- -1 (\MvcCore\IRouter::TRAILING_SLASH_REMOVE ) Always remove trailing slash from requested URL if there is any and redirect to it, except homepage.
- 0 (\MvcCore\IRouter::TRAILING_SLASH_BENEVOLENT ) Be absolutely benevolent for trailing slash in requested url.
- 1 (\MvcCore\IRouter::TRAILING_SLASH_ALWAYS ) Always keep trailing slash in requested URL or always add trailing slash into URL and redirect to it.
Default value is -1 - \MvcCore\IRouter::TRAILING_SLASH_REMOVE
Parameters
Returns
|
public
boolean
|
#
GetAutoCanonizeRequests( )
Get boolean info about if router does automatic check for canonical URL
request and if it process automatic redirect to canonical URL version if
detected or if it doesn't.
Get boolean info about if router does automatic check for canonical URL
request and if it process automatic redirect to canonical URL version if
detected or if it doesn't.
Returns
boolean
|
public
MvcCore\Router
|
#
SetAutoCanonizeRequests( boolean $autoCanonizeRequests = TRUE )
Set TRUE to process automatic check for canonical URL request to
process possible redirection if described request found after routing
is processed. Default value is TRUE to do it. You can use FALSE
otherwise for example for development purposes when you develop for
example url filtering in and out.
Set TRUE to process automatic check for canonical URL request to
process possible redirection if described request found after routing
is processed. Default value is TRUE to do it. You can use FALSE
otherwise for example for development purposes when you develop for
example url filtering in and out.
Parameters
Returns
|
public
MvcCore\Router
|
#
SetPreRouteMatchingHandler( callable $preRouteMatchingHandler = NULL )
Set up pre-route matching handler. This handler will be executed every
time after rewrite routes strategy is chosen, after first word from
requested path is parsed and before rewrite routes will be processed.
The handler could be used to fill in routes you need by the first parsed
word from request path and by completed request object. Given handler
callable has to accept first argument to be router instance, second
argument to be request object instance and third argument to be a string
with possibly parsed first word from requested path or an empty string.
Handler could return value to be void or anything else, doesn't matter.
Example:
$router->SetPreRouteMatchingHandler(
function (\MvcCore\Router $router, \MvcCore\Request $request, $firstPathWord) {
// load any routes from database here
$routes = $db->loadRoutingRoutesGroup($firstPathWord);
// add loaded routes into router
$router->AddRoutes($routes, $firstPathWord);
}
);
Set up pre-route matching handler. This handler will be executed every
time after rewrite routes strategy is chosen, after first word from
requested path is parsed and before rewrite routes will be processed.
The handler could be used to fill in routes you need by the first parsed
word from request path and by completed request object. Given handler
callable has to accept first argument to be router instance, second
argument to be request object instance and third argument to be a string
with possibly parsed first word from requested path or an empty string.
Handler could return value to be void or anything else, doesn't matter.
Example:
$router->SetPreRouteMatchingHandler( function (\MvcCore\Router $router, \MvcCore\Request $request, $firstPathWord) { // load any routes from database here $routes = $db->loadRoutingRoutesGroup($firstPathWord); // add loaded routes into router $router->AddRoutes($routes, $firstPathWord); }
);
Parameters
Returns
|
public
callable|null
|
#
GetPreRouteMatchingHandler( )
Get pre-route matching handler. This handler is always executed every
time after rewrite routes strategy is chosen, after first word from
requested path is parsed and before rewrite routes will be processed.
The handler is always used to fill in routes you need by the first parsed
word from request path and by completed request object. The handler
callable accepts first argument to be router instance, second
argument to be request object instance and third argument to be a string
with possibly parsed first word from requested path or an empty string.
Handler returns value to be void or anything else, doesn't matter.
Get pre-route matching handler. This handler is always executed every
time after rewrite routes strategy is chosen, after first word from
requested path is parsed and before rewrite routes will be processed.
The handler is always used to fill in routes you need by the first parsed
word from request path and by completed request object. The handler
callable accepts first argument to be router instance, second
argument to be request object instance and third argument to be a string
with possibly parsed first word from requested path or an empty string.
Handler returns value to be void or anything else, doesn't matter.
Returns
callable|null
|
public
MvcCore\Router
|
#
SetPreRouteUrlBuildingHandler( callable $preRouteUrlBuildingHandler = NULL )
Set up handler executed before building URL by rewrite routes. This
handler will be executed every time there is necessary to build an URL
when there are configured any rewrite routes and when there is no route
found to do it. Then the handler is executed to load any group of routes
from database into router instance if desired route is not already there.
If there is no route found in database, route name to build url is
marked to not request the database again automatically. Given handler
callable has to accept first argument to be router instance, second
argument to be a string with first Url() method argument - it could be
controller and action combination or route name and third argument to be
and array with params - the second argument from Url() method with
arguments for final URL address. Handler has to return an array, empty
or array with keys to be route names for each route to merge those new
routes with already defined routes in router instance in protected
property $router->urlRoutes .
Example:
$router->SetPreRouteUrlBuildingHandler(
function (\MvcCore\Router $router, $controllerActionOrRouteName, array $params = []) {
// load any routes from database here
$routes = $db->loadUrlRoutesGroup($controllerActionOrRouteName);
// return routes in array with keys to be route name for each route
return $routes;
}
);
Set up handler executed before building URL by rewrite routes. This
handler will be executed every time there is necessary to build an URL
when there are configured any rewrite routes and when there is no route
found to do it. Then the handler is executed to load any group of routes
from database into router instance if desired route is not already there.
If there is no route found in database, route name to build url is
marked to not request the database again automatically. Given handler
callable has to accept first argument to be router instance, second
argument to be a string with first Url() method argument - it could be
controller and action combination or route name and third argument to be
and array with params - the second argument from Url() method with
arguments for final URL address. Handler has to return an array, empty
or array with keys to be route names for each route to merge those new
routes with already defined routes in router instance in protected
property $router->urlRoutes .
Example:
$router->SetPreRouteUrlBuildingHandler( function (\MvcCore\Router $router, $controllerActionOrRouteName, array $params = []) { // load any routes from database here $routes = $db->loadUrlRoutesGroup($controllerActionOrRouteName); // return routes in array with keys to be route name for each route return $routes; }
);
Parameters
- $preRouteUrlBuildingHandler
- $preRouteMatchingHandler
Returns
|
public
callable|null
|
#
GetPreRouteUrlBuildingHandler( )
Get handler executed before building URL by rewrite routes. This
handler will be executed every time there is necessary to build an URL
when there are configured any rewrite routes and when there is no route
found to do it. Then the handler is executed to load any group of routes
from database into router instance if desired route is not already there.
If there is no route found in database, route name to build url is
marked to not request the database again automatically. Given handler
callable has to accept first argument to be router instance, second
argument to be a string with first Url() method argument - it could be
controller and action combination or route name and third argument to be
and array with params - the second argument from Url() method with
arguments for final URL address. Handler has to return an array, empty
or array with keys to be route names for each route to merge those new
routes with already defined routes in router instance in protected
property $router->urlRoutes .
Get handler executed before building URL by rewrite routes. This
handler will be executed every time there is necessary to build an URL
when there are configured any rewrite routes and when there is no route
found to do it. Then the handler is executed to load any group of routes
from database into router instance if desired route is not already there.
If there is no route found in database, route name to build url is
marked to not request the database again automatically. Given handler
callable has to accept first argument to be router instance, second
argument to be a string with first Url() method argument - it could be
controller and action combination or route name and third argument to be
and array with params - the second argument from Url() method with
arguments for final URL address. Handler has to return an array, empty
or array with keys to be route names for each route to merge those new
routes with already defined routes in router instance in protected
property $router->urlRoutes .
Returns
callable|null
|
public
boolean
|
#
Route( )
Route current app request by configured routes lists or by query string.
1. Check if request is targeting any internal action in internal ctrl.
2. If request is not internal, redirect to possible better URL form by
configured trailing slash strategy and return FALSE for redirection.
3. Choose route strategy by request path and existing query string
controller and/or action values - strategy by query string or by
rewrite routes.
4. Try to complete current route object by chosen strategy.
5. If any current route found and if route contains redirection, do it.
6. If there is no current route and request is targeting homepage, create
new empty route by default values if ctrl configuration allows it.
7. If there is any current route completed, complete self route name by
it to generate self routes and canonical URL later.
8. If there is necessary, try to complete canonical URL and if canonical
URL is shorter than requested URL, redirect user to shorter version.
If there was necessary to redirect user in routing process, return
immediately FALSE and return from this method. Else continue to next
step and return TRUE . This method is always called from core routing by:
\MvcCore\Application::Run(); => \MvcCore\Application::routeRequest(); .
Route current app request by configured routes lists or by query string.
1. Check if request is targeting any internal action in internal ctrl.
2. If request is not internal, redirect to possible better URL form by configured trailing slash strategy and return FALSE for redirection.
3. Choose route strategy by request path and existing query string controller and/or action values - strategy by query string or by rewrite routes.
4. Try to complete current route object by chosen strategy.
5. If any current route found and if route contains redirection, do it.
6. If there is no current route and request is targeting homepage, create new empty route by default values if ctrl configuration allows it.
7. If there is any current route completed, complete self route name by it to generate self routes and canonical URL later.
8. If there is necessary, try to complete canonical URL and if canonical URL is shorter than requested URL, redirect user to shorter version.
If there was necessary to redirect user in routing process, return
immediately FALSE and return from this method. Else continue to next
step and return TRUE . This method is always called from core routing by:
\MvcCore\Application::Run(); => \MvcCore\Application::routeRequest(); .
Returns
boolean
Throws
LogicException Route configuration property is missing.
InvalidArgumentException Wrong route pattern format.
|
public
boolean
|
#
RedefineRoutedTarget( string $controllerNamePc = NULL, string $actionNamePc = NULL, boolean $changeSelfRoute = FALSE )
You can redefine target controller and action and it doesn't matter,
what has been routed before. This method is only possible to use and it
make sense to use it only in any application post route handler, after
Route() method has been called and before controller is created by
application and dispatched. This method is highly advanced. There is
no missing template or controller or action checking.
You can redefine target controller and action and it doesn't matter,
what has been routed before. This method is only possible to use and it
make sense to use it only in any application post route handler, after
Route() method has been called and before controller is created by
application and dispatched. This method is highly advanced. There is
no missing template or controller or action checking.
Parameters
- $controllerNamePc
- Pascal case classic controller name definition.
- $actionNamePc
- Pascal case action name without
Action suffix.
- $changeSelfRoute
FALSE by default to change self route to generate self URLs.
Returns
boolean
|
public
string
|
#
Url( string $controllerActionOrRouteName = 'Index:Index', array $params = [] )
Generates url:
- By "Controller:Action" name and params array
(for routes configuration when routes array has keys with
"Controller:Action" strings and routes has not controller name and
action name defined inside).
- By route name and params array
(route name is key in routes configuration array, should be any string,
routes must have information about controller name and action name
inside).
Result address (url string) should have two forms:
- Nice rewritten URL by routes configuration (for apps with URL rewrite
support [Apache .htaccess or IIS URL rewrite module] and when first
param is key in routes configuration array).
- For all other cases is URL form like:
"index.php?controller=ctrlName&action=actionName"
(when first param is not founded in routes configuration array).
Method tries to find any route between routes by first argument and if
there is no route but if there is any pre route URL building handler
defined, the handler is called to assign desired routes from database
or any other place and then there is processed route search between
routes again. If there is still no routes, result url is completed
in query string form.
Generates url:
- By "Controller:Action" name and params array (for routes configuration when routes array has keys with "Controller:Action" strings and routes has not controller name and action name defined inside).
- By route name and params array (route name is key in routes configuration array, should be any string, routes must have information about controller name and action name inside).
Result address (url string) should have two forms:
- Nice rewritten URL by routes configuration (for apps with URL rewrite support [Apache .htaccess or IIS URL rewrite module] and when first param is key in routes configuration array).
- For all other cases is URL form like: "index.php?controller=ctrlName&action=actionName" (when first param is not founded in routes configuration array).
Method tries to find any route between routes by first argument and if
there is no route but if there is any pre route URL building handler
defined, the handler is called to assign desired routes from database
or any other place and then there is processed route search between
routes again. If there is still no routes, result url is completed
in query string form.
Parameters
- $controllerActionOrRouteName
Should be "Controller:Action" combination or just any
route name as custom specific string.
- $params
Optional, array with params, key is param name, value is
param value.
Returns
string
Throws
InvalidArgumentException
|
public
string
|
#
UrlByQueryString( string $controllerActionOrRouteName = 'Index:Index', array & $params = [], string $givenRouteName = NULL )
Complete optionally absolute, non-localized URL with all params in query string.
Example: "/application/base-bath/index.php?controller=ctrlName&action=actionName&name=cool-product-name&color=blue"
Complete optionally absolute, non-localized URL with all params in query string.
Example: "/application/base-bath/index.php?controller=ctrlName&action=actionName&name=cool-product-name&color=blue"
Parameters
- $controllerActionOrRouteName
- $params
- $givenRouteName
Returns
string
|
public
string
|
#
UrlByRoute( MvcCore\IRoute $route, array & $params = [], string $urlParamRouteName = NULL )
Complete optionally absolute, non-localized URL by route instance reverse
pattern and given $params array. If any param required by reverse
pattern is missing in params, there is used router default params
completed in routing process.
Example:
Input (\MvcCore\Route::$reverse ):
"/products-list/<name>/<color>"
Input ($params):
[
"name" => "cool-product-name",
"color" => "red",
"variant" => ["L", "XL"],
];
Output:
/application/base-bath/products-list/cool-product-name/blue?variant[]=L&variant[]=XL"
Complete optionally absolute, non-localized URL by route instance reverse
pattern and given $params array. If any param required by reverse
pattern is missing in params, there is used router default params
completed in routing process.
Example:
Input (\MvcCore\Route::$reverse ): "/products-list/<name>/<color>"
Input ($params): [ "name" => "cool-product-name", "color" => "red", "variant" => ["L", "XL"], ];
Output: /application/base-bath/products-list/cool-product-name/blue?variant[]=L&variant[]=XL"
Parameters
- $route
- $params
- $urlParamRouteName
Returns
string
|
public
MvcCore\Route
|
#
SetOrCreateDefaultRouteAsCurrent( string $routeName, string $controllerPc, string $actionPc, boolean $fallbackCall = FALSE )
THIS METHOD IS MOSTLY USED INTERNALLY.
THIS METHOD IS MOSTLY USED INTERNALLY.
Try to find any existing route by $routeName argument
or try to find any existing route by $controllerPc:$actionPc arguments
combination and set this founded route instance as current route object.
Also re-target, re-set request object controller and action values
(or also path) to this newly configured current route object.
If there is no route by name or controller and action combination found,
create new empty route by configured route class from application core
and set up this new route by given $routeName , $controllerPc , $actionPc
with route match pattern to match any request #/(?<path>.*)# and with
reverse pattern /<path> to create URL by single path param only. And
add this newly created route into routes (into default routes group) and
set this new route as current route object.
This method is always called internally for following cases:
- When router has no routes configured and request is necessary to route by query string arguments only (controller and action).
- When no route matched and when is necessary to create default route object for homepage, handled by Index:Index by default.
- When no route matched and when router is configured to route requests to default route if no route matched by $router->SetRouteToDefaultIfNotMatch(); .
- When is necessary to create not found route or error route when there was not possible to route the request or when there was any uncaught exception in controller or template caught later by application.
Parameters
- $routeName
Always as default , error or not_found , by constants:
\MvcCore\IRouter::DEFAULT_ROUTE_NAME
\MvcCore\IRouter::DEFAULT_ROUTE_NAME_ERROR
\MvcCore\IRouter::DEFAULT_ROUTE_NAME_NOT_FOUND
- $controllerPc
- Controller name in pascal case.
- $actionPc
- Action name with pascal case without ending
Action substring.
- $fallbackCall
FALSE by default. If TRUE , this function is called from error rendering fallback, self route name is not changed.
Returns
|