Source of file Url.php
Size: 3,943 Bytes - Last Modified: 2014-03-12T23:21:18+01:00
/home/theseer/Downloads/ZendFramework-2.3.0/library/Zend/Mvc/Controller/Plugin/Url.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 | <?php /** * Zend Framework (http://framework.zend.com/) * * @link http://github.com/zendframework/zf2 for the canonical source repository * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License */ namespace Zend\Mvc\Controller\Plugin; use Traversable; use Zend\EventManager\EventInterface; use Zend\Mvc\Exception; use Zend\Mvc\InjectApplicationEventInterface; use Zend\Mvc\ModuleRouteListener; use Zend\Mvc\MvcEvent; use Zend\Mvc\Router\RouteStackInterface; class Url extends AbstractPlugin { /** * Generates a URL based on a route * * @param string $route RouteInterface name * @param array|Traversable $params Parameters to use in url generation, if any * @param array|bool $options RouteInterface-specific options to use in url generation, if any. * If boolean, and no fourth argument, used as $reuseMatchedParams. * @param bool $reuseMatchedParams Whether to reuse matched parameters * * @throws \Zend\Mvc\Exception\RuntimeException * @throws \Zend\Mvc\Exception\InvalidArgumentException * @throws \Zend\Mvc\Exception\DomainException * @return string */ public function fromRoute($route = null, $params = array(), $options = array(), $reuseMatchedParams = false) { $controller = $this->getController(); if (!$controller instanceof InjectApplicationEventInterface) { throw new Exception\DomainException('Url plugin requires a controller that implements InjectApplicationEventInterface'); } if (!is_array($params)) { if (!$params instanceof Traversable) { throw new Exception\InvalidArgumentException( 'Params is expected to be an array or a Traversable object' ); } $params = iterator_to_array($params); } $event = $controller->getEvent(); $router = null; $matches = null; if ($event instanceof MvcEvent) { $router = $event->getRouter(); $matches = $event->getRouteMatch(); } elseif ($event instanceof EventInterface) { $router = $event->getParam('router', false); $matches = $event->getParam('route-match', false); } if (!$router instanceof RouteStackInterface) { throw new Exception\DomainException('Url plugin requires that controller event compose a router; none found'); } if (3 == func_num_args() && is_bool($options)) { $reuseMatchedParams = $options; $options = array(); } if ($route === null) { if (!$matches) { throw new Exception\RuntimeException('No RouteMatch instance present'); } $route = $matches->getMatchedRouteName(); if ($route === null) { throw new Exception\RuntimeException('RouteMatch does not contain a matched route name'); } } if ($reuseMatchedParams && $matches) { $routeMatchParams = $matches->getParams(); if (isset($routeMatchParams[ModuleRouteListener::ORIGINAL_CONTROLLER])) { $routeMatchParams['controller'] = $routeMatchParams[ModuleRouteListener::ORIGINAL_CONTROLLER]; unset($routeMatchParams[ModuleRouteListener::ORIGINAL_CONTROLLER]); } if (isset($routeMatchParams[ModuleRouteListener::MODULE_NAMESPACE])) { unset($routeMatchParams[ModuleRouteListener::MODULE_NAMESPACE]); } $params = array_merge($routeMatchParams, $params); } $options['name'] = $route; return $router->assemble($params, $options); } } |