Exemple #1
0
 public function __invoke($routeName, $params = [], $excludedParams = [])
 {
     /** @var \Zend\View\HelperPluginManager $helperManager */
     $helperManager = $this->serviceLocator;
     /** @var \Zend\ServiceManager\ServiceManager $locator */
     $locator = $helperManager->getServiceLocator();
     /** @var \Zend\Mvc\Router\SimpleRouteStack $router */
     $router = $locator->get('Router');
     $assembledParams = [];
     if ($router->hasRoute($routeName)) {
         /** @var \Zend\Mvc\Router\Http\RouteInterface $route */
         $route = $router->getRoute($routeName);
         $assembledParams = $route->getAssembledParams();
     }
     /** @var \Zend\Http\PhpEnvironment\Request $request */
     $request = $locator->get('request');
     $uri = clone $request->getUri();
     $query = [];
     foreach (array_merge($uri->getQueryAsArray(), $params) as $key => $value) {
         if ($value != '') {
             $query[$key] = $value;
         }
     }
     $uri->setQuery($query);
     /** @var \Zend\View\Helper\Url $urlViewHelper */
     $urlViewHelper = $this->view->plugin('url');
     $return = $urlViewHelper->__invoke($routeName, $query);
     $query = $uri->getQueryAsArray();
     foreach ($uri->getQueryAsArray() as $key => $value) {
         if (in_array($key, $assembledParams) || in_array($key, $excludedParams)) {
             unset($query[$key]);
         }
     }
     $uri->setQuery($query);
     return count($query) == 0 ? $return : $return . '?' . Http::encodeQueryFragment($uri->getQuery());
 }