Source of file Redirect.php
Size: 3,765 Bytes - Last Modified: 2014-03-12T23:21:18+01:00
/home/theseer/Downloads/ZendFramework-2.3.0/library/Zend/Mvc/Controller/Plugin/Redirect.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 | <?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 Zend\Http\Response; use Zend\Mvc\Exception; use Zend\Mvc\InjectApplicationEventInterface; use Zend\Mvc\MvcEvent; /** * @todo allow specifying status code as a default, or as an option to methods */ class Redirect extends AbstractPlugin { protected $event; protected $response; /** * Generates a URL based on a route * * @param string $route RouteInterface name * @param array $params Parameters to use in url generation, if any * @param array $options RouteInterface-specific options to use in url generation, if any * @param bool $reuseMatchedParams Whether to reuse matched parameters * @return Response * @throws Exception\DomainException if composed controller does not implement InjectApplicationEventInterface, or * router cannot be found in controller event */ public function toRoute($route = null, $params = array(), $options = array(), $reuseMatchedParams = false) { $controller = $this->getController(); if (!$controller || !method_exists($controller, 'plugin')) { throw new Exception\DomainException('Redirect plugin requires a controller that defines the plugin() method'); } $urlPlugin = $controller->plugin('url'); if (is_scalar($options)) { $url = $urlPlugin->fromRoute($route, $params, $options); } else { $url = $urlPlugin->fromRoute($route, $params, $options, $reuseMatchedParams); } return $this->toUrl($url); } /** * Redirect to the given URL * * @param string $url * @return Response */ public function toUrl($url) { $response = $this->getResponse(); $response->getHeaders()->addHeaderLine('Location', $url); $response->setStatusCode(302); return $response; } /** * Refresh to current route * * @return Response */ public function refresh() { return $this->toRoute(null, array(), array(), true); } /** * Get the response * * @return Response * @throws Exception\DomainException if unable to find response */ protected function getResponse() { if ($this->response) { return $this->response; } $event = $this->getEvent(); $response = $event->getResponse(); if (!$response instanceof Response) { throw new Exception\DomainException('Redirect plugin requires event compose a response'); } $this->response = $response; return $this->response; } /** * Get the event * * @return MvcEvent * @throws Exception\DomainException if unable to find event */ protected function getEvent() { if ($this->event) { return $this->event; } $controller = $this->getController(); if (!$controller instanceof InjectApplicationEventInterface) { throw new Exception\DomainException('Redirect plugin requires a controller that implements InjectApplicationEventInterface'); } $event = $controller->getEvent(); if (!$event instanceof MvcEvent) { $params = $event->getParams(); $event = new MvcEvent(); $event->setParams($params); } $this->event = $event; return $this->event; } } |