1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67:
<?php
/**
* MvcCore
*
* This source file is subject to the BSD 3 License
* For the full copyright and license information, please view
* the LICENSE.md file that are distributed with this source code.
*
* @copyright Copyright (c) 2016 Tom Flidr (https://github.com/mvccore)
* @license https://mvccore.github.io/docs/mvccore/5.0.0/LICENCE.md
*/
namespace MvcCore\Ext\Routers\Modules\Route;
trait Matching {
/**
* Return subject value used for `preg_match_all()` route match processing.
* Complete subject by route flags. Route `pattern` (or `reverse`) must
* contain domain part or/and base path. Prepare those values from request
* object.
* @param \MvcCore\Request $request
* @throws \InvalidArgumentException Domain route pattern or reverse
* must be defined as absolute.
* @return string
*/
protected function matchesGetSubject (\MvcCore\IRequest $request) {
/** @var $this \MvcCore\Ext\Routers\Modules\Route */
$subject = $this->matchesGetSubjectHostAndBase($request) ;
if (!$this->flags[0])
throw new \InvalidArgumentException(
"[".get_class()."] Domain route pattern or reverse must be defined as "
."absolute with `//`, `http://` or `https://` at the beginning (`//www.domain.com`)."
);
return $subject;
}
/**
* Parse rewrite params from `preg_match_all()` `$matches` result array into
* array, keyed by param name with parsed value.
* @param array $matchedValues
* @param array $defaults
* @return array
*/
protected function & matchesParseRewriteParams (& $matchedValues, & $defaults) {
/** @var $this \MvcCore\Ext\Routers\Modules\Route */
$matchedParams = [];
array_shift($matchedValues); // first item is always matched whole `$request->GetPath()` string.
foreach ($matchedValues as $key => $matchedValueArr) {
if (is_numeric($key))
continue;
$matchedValue = (string) current($matchedValueArr);
if (!isset($defaults[$key]))
$defaults[$key] = NULL;
$matchedEmptyString = mb_strlen($matchedValue) === 0;
if ($matchedEmptyString)
$matchedValue = $defaults[$key];
// continue if there is already valid ctrl and action from route ctrl or action configuration
if (isset($matchedParams[$key]) && $matchedEmptyString)
continue;
$matchedParams[$key] = $matchedValue;
}
return $matchedParams;
}
}