1<?php 2/** 3 * Zend Framework (http://framework.zend.com/) 4 * 5 * @link http://github.com/zendframework/zf2 for the canonical source repository 6 * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) 7 * @license http://framework.zend.com/license/new-bsd New BSD License 8 */ 9 10namespace Zend\Mvc\View\Http; 11 12use Zend\Console\Request as ConsoleRequest; 13use Zend\EventManager\AbstractListenerAggregate; 14use Zend\EventManager\EventManagerInterface; 15use Zend\Http\Request as HttpRequest; 16use Zend\Mvc\MvcEvent; 17 18class InjectRoutematchParamsListener extends AbstractListenerAggregate 19{ 20 /** 21 * Should request params overwrite existing request params? 22 * 23 * @var bool 24 */ 25 protected $overwrite = true; 26 27 /** 28 * {@inheritDoc} 29 */ 30 public function attach(EventManagerInterface $events) 31 { 32 $this->listeners[] = $events->attach(MvcEvent::EVENT_DISPATCH, array($this, 'injectParams'), 90); 33 } 34 35 /** 36 * Take parameters from RouteMatch and inject them into the request. 37 * 38 * @param MvcEvent $e 39 * @return void 40 */ 41 public function injectParams(MvcEvent $e) 42 { 43 $routeMatchParams = $e->getRouteMatch()->getParams(); 44 $request = $e->getRequest(); 45 46 /** @var $params \Zend\Stdlib\Parameters */ 47 if ($request instanceof ConsoleRequest) { 48 $params = $request->params(); 49 } elseif ($request instanceof HttpRequest) { 50 $params = $request->get(); 51 } else { 52 // unsupported request type 53 return; 54 } 55 56 if ($this->overwrite) { 57 foreach ($routeMatchParams as $key => $val) { 58 $params->$key = $val; 59 } 60 } else { 61 foreach ($routeMatchParams as $key => $val) { 62 if (!$params->offsetExists($key)) { 63 $params->$key = $val; 64 } 65 } 66 } 67 } 68 69 /** 70 * Should RouteMatch parameters replace existing Request params? 71 * 72 * @param bool $overwrite 73 */ 74 public function setOverwrite($overwrite) 75 { 76 $this->overwrite = $overwrite; 77 } 78 79 /** 80 * @return bool 81 */ 82 public function getOverwrite() 83 { 84 return $this->overwrite; 85 } 86} 87