/** * Given a path and replacements, it will replace the identifiers in the * path with the replacements given. * If replacements is a single length array that has an element that is * an array, it will do replacements based on key value pairs. * @return string */ public static function doPathReplacement($path, $replacements = array()) { // Do this to allow key pairing when calling from php if (count($replacements) > 0 && !array_key_exists(0, $replacements)) { $replacements = array($replacements); } // Get the count of the replacements $replacementsCount = count($replacements); if ($replacementsCount == 0) { // Nothing to replace, just return the relative url return self::getRelativeUrl($path); } else { if ($replacementsCount == 1 && is_array($replacements[0])) { // We're going to do key pairing to replace the identifiers in the path $patterns = array(); $values = array(); foreach ($replacements[0] as $key => $val) { $patterns[] = self::IDENT_PREG_START . preg_quote($key) . self::IDENT_PREF_END; $values[] = $val; } $path = Routes::getRelativeUrl(preg_replace($patterns, $values, $path)); $cleanedPath = preg_replace(self::IDENT_PREG, '', $path); return $cleanedPath; } else { // Replace based on position in the array and not keys $patterns = array_fill(0, $replacementsCount, self::IDENT_PREG); $path = preg_replace($patterns, $replacements, $path, 1); $cleanedPath = preg_replace(self::IDENT_PREG, '', $path); return self::getRelativeUrl($cleanedPath); } } }