Methods summary
public
string|string[]
|
#
GetDefaultLocalization( boolean $asString = FALSE )
Get default language and locale. Language is always defined as two lower case
characters - international language code and locale is always defined as
two or three upper case characters or digits - international locale code.
Default localization is used in cases, when is not possible to detect
language and locale from URL or when is not possible to detect language
and locale from Accept-Language http header or not possible to get
previous localization from session.
Get default language and locale. Language is always defined as two lower case
characters - international language code and locale is always defined as
two or three upper case characters or digits - international locale code.
Default localization is used in cases, when is not possible to detect
language and locale from URL or when is not possible to detect language
and locale from Accept-Language http header or not possible to get
previous localization from session.
Parameters
- $asString
FALSE by default to get array with lang and locale,
TRUE to get lang and locale as string.
Returns
string|string[]
|
public
MvcCore\Ext\Routers\Localization
|
#
SetDefaultLocalization( $defaultLocalizationOrLanguage, $defaultLocale = NULL )
Set default language and locale. Language has to be defined as two lower case
characters - international language code and locale has to be defined as
two or three upper case characters or digits - international locale code.
Default localization is used in cases, when is not possible to detect
language and locale from URL or when is not possible to detect language
and locale from Accept-Language http header or not possible to get
previous localization from session.
Set default language and locale. Language has to be defined as two lower case
characters - international language code and locale has to be defined as
two or three upper case characters or digits - international locale code.
Default localization is used in cases, when is not possible to detect
language and locale from URL or when is not possible to detect language
and locale from Accept-Language http header or not possible to get
previous localization from session.
Returns
Var
string $defaultLocalizationOrLanguage It could be en or en-US , en-GB ...
string $defaultLocale It could be US , GB ...
|
public
string|array
|
#
GetLocalization( boolean $asString = FALSE )
Get current router context localization value. It could contain in first
index international language code string and nothing more or the language
under first index and international locale code under second index.
If there are no language and locale detected, returned array is empty.
Get current router context localization value. It could contain in first
index international language code string and nothing more or the language
under first index and international locale code under second index.
If there are no language and locale detected, returned array is empty.
Parameters
- $asString
FALSE by default to get array with lang and locale,
TRUE to get lang and locale as string.
Returns
string|array
|
public
MvcCore\Ext\Routers\Localization
|
#
SetLocalization( string $lang, string $locale = NULL )
Set current router context localization value. It could contain in first
index international language code string and nothing more or the language
under first index and international locale code under second index.
Set current router context localization value. It could contain in first
index international language code string and nothing more or the language
under first index and international locale code under second index.
Parameters
Returns
Throws
InvalidArgumentException Localization must be defined at least by the language.
|
public
boolean
|
#
GetRedirectFirstRequestToDefault( )
If TRUE , redirect first request by session to default localization
version if localization in request is not allowed.
If not configured, FALSE by default to not redirect in first request to
default localization version but to route requested localization version.
If TRUE , redirect first request by session to default localization
version if localization in request is not allowed.
If not configured, FALSE by default to not redirect in first request to
default localization version but to route requested localization version.
Returns
boolean
|
public
MvcCore\Ext\Routers\Localization
|
#
SetRedirectFirstRequestToDefault( boolean $redirectFirstRequestToDefault = TRUE )
If TRUE , redirect first request by session to default localization
version if localization in request is not allowed.
If not configured, FALSE by default to not redirect in first request to
default localization version but to route requested localization version.
If TRUE , redirect first request by session to default localization
version if localization in request is not allowed.
If not configured, FALSE by default to not redirect in first request to
default localization version but to route requested localization version.
Parameters
- $redirectFirstRequestToDefault
Returns
|
public
boolean
|
#
GetAllowNonLocalizedRoutes( )
TRUE by default to allow routing with non-localized routes.
If FALSE non-localized routes are ignored and there is thrown an
exception in development environment.
TRUE by default to allow routing with non-localized routes.
If FALSE non-localized routes are ignored and there is thrown an
exception in development environment.
Returns
boolean
|
public
MvcCore\Ext\Routers\Localization
|
#
SetAllowNonLocalizedRoutes( boolean $allowNonLocalizedRoutes = TRUE )
TRUE by default to allow routing with non-localized routes.
If FALSE non-localized routes are ignored and there is thrown an
exception in development environment.
TRUE by default to allow routing with non-localized routes.
If FALSE non-localized routes are ignored and there is thrown an
exception in development environment.
Parameters
Returns
|
public
boolean
|
#
GetDetectLocalizationOnlyByLang( )
Get detect localization only by language record from Accept-Language http
header record, not together with locale code. Parsed international
language code will be enough to choose final target application
localization. It will be chosen first localization in allowed list with
detected language. TRUE by default. If FALSE , then there is necessary
to send into application in Accept-Language http header international
language code together with international locale code with the only same
combination which application has configured in allowed localizations only.
Get detect localization only by language record from Accept-Language http
header record, not together with locale code. Parsed international
language code will be enough to choose final target application
localization. It will be chosen first localization in allowed list with
detected language. TRUE by default. If FALSE , then there is necessary
to send into application in Accept-Language http header international
language code together with international locale code with the only same
combination which application has configured in allowed localizations only.
Returns
boolean
|
public
MvcCore\Ext\Routers\Localization
|
#
SetDetectLocalizationOnlyByLang( boolean $detectLocalizationOnlyByLang = TRUE )
Set detect localization only by language from Accept-Language http
header record, not together with locale code. Parsed international
language code will be enough to choose final target application
localization. It will be chosen first localization in allowed list with
detected language. TRUE by default. If FALSE , then there is necessary
to send into application in Accept-Language http header international
language code together with international locale code with the only same
combination which application has configured in allowed localizations only.
Set detect localization only by language from Accept-Language http
header record, not together with locale code. Parsed international
language code will be enough to choose final target application
localization. It will be chosen first localization in allowed list with
detected language. TRUE by default. If FALSE , then there is necessary
to send into application in Accept-Language http header international
language code together with international locale code with the only same
combination which application has configured in allowed localizations only.
Parameters
- $detectLocalizationOnlyByLang
Returns
|
public
array
|
#
GetAllowedLocalizations( )
Get list of allowed localization strings in your application, default
localization will be allowed automatically. List is returned as array of
strings. Every item has to be international language code or it has to be
international language code and international locale code separated by
dash.
Get list of allowed localization strings in your application, default
localization will be allowed automatically. List is returned as array of
strings. Every item has to be international language code or it has to be
international language code and international locale code separated by
dash.
Returns
array
|
public
MvcCore\Ext\Routers\Localization
|
#
SetAllowedLocalizations( $allowedLocalizations )
Set list of allowed localization strings in your application, default
localization will be allowed automatically. List has to be defined as array
of strings. Every item has to be international language code or it has to be
international language code and international locale code separated by
dash. All previously defined allowed localizations will be replaced.
Default localization is always allowed automatically.
Set list of allowed localization strings in your application, default
localization will be allowed automatically. List has to be defined as array
of strings. Every item has to be international language code or it has to be
international language code and international locale code separated by
dash. All previously defined allowed localizations will be replaced.
Default localization is always allowed automatically.
Returns
Var
string $allowedLocalizations..., International lower case language
code(s) (+ optionally dash character
+ upper case international locale
code(s)).
|
public
MvcCore\Ext\Routers\Localization
|
#
AddAllowedLocalizations( $allowedLocalizations )
Add list of allowed localization strings in your application, default
localization will be allowed automatically. List has to be defined as array
of strings. Every item has to be international language code or it has to be
international language code and international locale code separated by
dash.
Default localization is always allowed automatically.
Add list of allowed localization strings in your application, default
localization will be allowed automatically. List has to be defined as array
of strings. Every item has to be international language code or it has to be
international language code and international locale code separated by
dash.
Default localization is always allowed automatically.
Returns
Var
string $allowedLocalizations..., International lower case language
code(s) (+ optionally dash character
+ upper case international locale
code(s)).
|
public
array
&
|
#
GetLocalizationEquivalents( )
Get list of localization equivalents used in localization detection by http
header Accept-Language parsed in first request. It could be used for
language very similar countries like Ukraine & Russia, Czech & Slovakia ...
Keys in this array is target localization, value is an array with target
localization equivalents.
Get list of localization equivalents used in localization detection by http
header Accept-Language parsed in first request. It could be used for
language very similar countries like Ukraine & Russia, Czech & Slovakia ...
Keys in this array is target localization, value is an array with target
localization equivalents.
Returns
array
|
public
MvcCore\Ext\Routers\Localization
|
#
SetLocalizationEquivalents( array $localizationEquivalents = [] )
Set list of localization equivalents used in localization detection by http
header Accept-Language parsed in first request. It could be used for
language very similar countries like Ukraine & Russia, Czech & Slovakia ...
Keys in this array is target localization, value is an array with target
localization equivalents. All previously configured localization equivalents
will be replaced with given configuration.
Set list of localization equivalents used in localization detection by http
header Accept-Language parsed in first request. It could be used for
language very similar countries like Ukraine & Russia, Czech & Slovakia ...
Keys in this array is target localization, value is an array with target
localization equivalents. All previously configured localization equivalents
will be replaced with given configuration.
Parameters
- $localizationEquivalents
Keys in this array is target
localization, value is an array
with target localization equivalents.
Returns
|
public
MvcCore\Ext\Routers\Localization
|
#
AddLocalizationEquivalents( array $localizationEquivalents = [] )
Add or merge items in list with localization equivalents used in localization
detection by http header Accept-Language parsed in first request. It could
be used for language very similar countries like Ukraine & Russia, Czech & Slovakia ...
Keys in this array is target localization, value is an array with target
localization equivalents. All previously configured localization equivalents
will be merged with given configuration.
Add or merge items in list with localization equivalents used in localization
detection by http header Accept-Language parsed in first request. It could
be used for language very similar countries like Ukraine & Russia, Czech & Slovakia ...
Keys in this array is target localization, value is an array with target
localization equivalents. All previously configured localization equivalents
will be merged with given configuration.
Parameters
- $localizationEquivalents
Keys in this array is target
localization, value is an array
with target localization equivalents.
Returns
|
public
boolean
|
#
GetRouteRecordsByLanguageAndLocale( )
If TRUE (default FALSE ), route records like pattern , match ,
reverse or defaults has to be defined by international language code
and international locale code, not only by language code by default.
This option is very rare, if different locales have different naming
for URL strings.
If TRUE (default FALSE ), route records like pattern , match ,
reverse or defaults has to be defined by international language code
and international locale code, not only by language code by default.
This option is very rare, if different locales have different naming
for URL strings.
Returns
boolean
|
public
MvcCore\Ext\Routers\Localization
|
#
SetRouteRecordsByLanguageAndLocale( boolean $routeRecordsByLanguageAndLocale = TRUE )
If TRUE (default FALSE ), route records like pattern , match ,
reverse or defaults has to be defined by international language code
and international locale code, not only by language code by default.
This option is very rare, if different locales have different naming
for URL strings.
If TRUE (default FALSE ), route records like pattern , match ,
reverse or defaults has to be defined by international language code
and international locale code, not only by language code by default.
This option is very rare, if different locales have different naming
for URL strings.
Parameters
- $routeRecordsByLanguageAndLocale
Returns
|
public
MvcCore\Ext\Routers\Localization
|
#
AddRoutes( array $routes = [], string|array|null $groupNames = NULL, boolean $prepend = FALSE, boolean $throwExceptionForDuplication = TRUE )
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>",
], "eshop");
or:
\MvcCore\Router::GetInstance()->AddRoutes([ 'products_list' => [ "pattern" => [ "en" => "/products-list/<name>/<color>", "de" => "/produkt-liste/<name>/<color>" ], "controllerAction" => "Products:List", "defaults" => ["name" => "default-name", "color" => "red"], "constraints" => ["name" => "[^/]*", "color" => "[a-z]*"] ]
], ["en" => "eshop", "de" => "einkaufen"]);
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.
- $groupNames
Group name or names is first matched/parsed word(s) 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. If argument is an array, it
must contain localization keys and localized group names.
- $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 overwritten by new one.
Returns
|
public
MvcCore\Ext\Routers\Localization
|
#
SetRoutes( MvcCore\Route[] |MvcCore\Ext\Routers\Localizations\Route[] |array $routes = [], string|array|null $groupNames = NULL, boolean $autoInitialize = TRUE )
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>",
], "eshop");
or:
\MvcCore\Router::GetInstance()->SetRoutes([ 'products_list' => [ "pattern" => [ "en" => "/products-list/<name>/<color>", "de" => "/produkt-liste/<name>/<color>" ], "controllerAction" => "Products:List", "defaults" => ["name" => "default-name", "color" => "red"], "constraints" => ["name" => "[^/]*", "color" => "[a-z]*"] ]
], ["en" => "eshop", "de" => "einkaufen"]);
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.
- $groupNames
Group name or names is first matched/parsed word(s) 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. If argument is an array, it
must contain localization keys and localized group names.
- $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
records, completed always from array keys. You can you
FALSE to set routes without any change or auto-init, it
could be useful to restore cached routes etc.
Returns
|
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. Choose route strategy by request path and existing query string
controller and/or action values - strategy by query string or by
rewrite routes.
3. If request is not internal, redirect to possible better URL form by
configured trailing slash strategy and return FALSE for redirection.
4. Prepare localization properties and redirect if necessary.
5. Try to complete current route object by chosen strategy.
6. If there was not found any rewrite route in rewrite routes strategy,
also if there is no localization in request, disallow non localized
route and re-call localization preparing method and redirect if
necessary. It means any request path will be redirected into default
localization.
7. If any current route found and if route contains redirection, do it.
8. If there is no current route and request is targeting homepage, create
new empty route by default values if ctrl configuration allows it.
9. If there is any current route completed, complete self route name by
it to generate self routes and canonical URL later.
10.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. Choose route strategy by request path and existing query string controller and/or action values - strategy by query string or by rewrite routes.
3. If request is not internal, redirect to possible better URL form by configured trailing slash strategy and return FALSE for redirection.
4. Prepare localization properties and redirect if necessary.
5. Try to complete current route object by chosen strategy.
6. If there was not found any rewrite route in rewrite routes strategy, also if there is no localization in request, disallow non localized route and re-call localization preparing method and redirect if necessary. It means any request path will be redirected into default localization.
7. If any current route found and if route contains redirection, do it.
8. If there is no current route and request is targeting homepage, create new empty route by default values if ctrl configuration allows it.
9. If there is any current route completed, complete self route name by it to generate self routes and canonical URL later.
10.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
string
|
#
UrlByRoute( MvcCore\IRoute $route, array & $params = [], string $urlParamRouteName = NULL )
Complete non-absolute, non-localized url by route instance reverse info.
If there is key media_version in $params , unset this param before
route url completing and choose by this param url prefix to prepend
completed url string.
If there is key localization in $params , unset this param before
route url completing and place this param as url prefix to prepend
completed url string and to prepend media site version prefix.
Example:
Input (\MvcCore\Route::$reverse ):
"/products-list/<name>/<color>"
Input ($params):
array(
"name" => "cool-product-name",
"color" => "red",
"variant" => ["L", "XL"],
"localization" => "en-US",
);
Output:
/application/base-bath/en-US/products-list/cool-product-name/blue?variant[]=L&variant[]=XL"
Complete non-absolute, non-localized url by route instance reverse info.
If there is key media_version in $params , unset this param before
route url completing and choose by this param url prefix to prepend
completed url string.
If there is key localization in $params , unset this param before
route url completing and place this param as url prefix to prepend
completed url string and to prepend media site version prefix.
Example:
Input (\MvcCore\Route::$reverse ): "/products-list/<name>/<color>"
Input ($params): array( "name" => "cool-product-name", "color" => "red", "variant" => ["L", "XL"], "localization" => "en-US", );
Output: /application/base-bath/en-US/products-list/cool-product-name/blue?variant[]=L&variant[]=XL"
Parameters
- $route
- $route
- $params
- $urlParamRouteName
Returns
string
|