예제 #1
0
파일: Router.php 프로젝트: cawaphp/cawa
 /**
  * @param string $name
  * @param array $data
  * @param bool $warnData
  *
  * @return Uri
  */
 public function getUri(string $name, array $data = [], $warnData = true) : Uri
 {
     if (!isset($this->routes[$name])) {
         throw new \InvalidArgumentException(sprintf("Invalid route name '%s'", $name));
     }
     $route = $this->routes[$name];
     $uri = new Uri();
     $uri->removeAllQueries()->setFragment(null)->setPath($this->routeRegexp($route, $data));
     // $cloneData = $data;
     // append querystring
     if ($route->getUserInputs()) {
         $queryToAdd = [];
         foreach ($route->getUserInputs() as $querystring) {
             if (!isset($data[$querystring->getName()]) && $querystring->isMandatory() && $warnData && $route->getMethod() != 'POST' && $route->getMethod() != 'PUT' && $route->getMethod() != 'DELETE') {
                 throw new \InvalidArgumentException(sprintf("Missing querystring '%s' to generate route '%s'", $querystring->getName(), $route->getName()));
             }
             if (isset($data[$querystring->getName()])) {
                 // unset($cloneData[$querystring->getName()]);
                 $queryToAdd[$querystring->getName()] = $data[$querystring->getName()];
             }
         }
         $uri->addQueries($queryToAdd);
     }
     /*
     // Args can be consumed by routeRegexp and not remove from cloneData
     if (sizeof($cloneData)) {
         throw new \InvalidArgumentException(sprintf(
             "Too many data to generate route '%s' with keys %s",
             $route->getName(),
             "'" . implode("', '", array_keys($cloneData)) . "'"
         ));
     }
     */
     return $uri;
 }