Пример #1
0
 /**
  * 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);
         }
     }
 }