public function onRoute(MvcEvent $e) { $request = $e->getRequest(); if (!$request instanceof HttpRequest) { return; } $application = $e->getApplication(); $serviceLocator = $application->getServiceManager(); // Load the configuration for maintenance mode if ($serviceLocator->has('MaintenanceConfig')) { $config = $serviceLocator->get('MaintenanceConfig'); } else { $config = new Config(); } if (!$config->isEnabled()) { // Maintenance mode is disabled. return; } // Check the white list if ($request instanceof PhpRequest) { $address = $request->getServer('REMOTE_ADDR', null); } else { $address = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : null; } if (!empty($address)) { if (in_array($address, $config->getWhitelist())) { return; } } // Render the maintenance layout $renderer = new PhpRenderer(); if ($serviceLocator->has('ViewHelperManager')) { $renderer->setHelperPluginManager($serviceLocator->get('ViewHelperManager')); } $resolver = new TemplateMapResolver(); $resolver->add('maintenance', $config->getTemplate()); $renderer->setResolver($resolver); $content = $renderer->render('maintenance'); // Set the response $response = $e->getResponse(); if (!$response instanceof HttpResponse) { $response = new HttpResponse(); } $statusCode = $config->getStatusCode(); $response->setStatusCode($statusCode); if ($statusCode === 503 && !$response->getHeaders()->has('Retry-After')) { $retryDate = $config->getRetryAfter(); if ($retryDate instanceof DateTime) { $retryAfter = new RetryAfter(); $retryAfter->setDate($retryDate); $response->getHeaders()->addHeader($retryAfter); } } $response->setContent($content); $e->setResponse($response); // Return the response return $response; }
public function testCanAppendMultipleEntriesAsTraversableViaAdd() { $map = array('foo/bar' => __DIR__ . '/foo/bar.phtml'); $resolver = new TemplateMapResolver($map); $more = new ArrayObject(array('foo/baz' => __DIR__ . '/../foo/baz.phtml', 'baz/bat' => __DIR__ . '/baz/bat.phtml')); $resolver->add($more); $expected = array_merge($map, $more->getArrayCopy()); $this->assertEquals($expected, $resolver->getMap()); }
public function createService(ServiceLocatorInterface $serviceLocator) { /* @var $config ModuleOptions */ $config = $serviceLocator->get('ZendSmarty\\ModuleOptions'); /* @var $orig TemplateMapResolver */ $orig = $serviceLocator->get('ViewTemplateMapResolver'); $suffix = '.' . $config->suffix; $nlen = -strlen($suffix); $instance = new TemplateMapResolver(); foreach ($orig->getMap() as $name => $file) { if (substr($file, $nlen) === $suffix) { $instance->add($name, $file); } } return $instance; }
public function testTriggersRenderErrorEventInCaseOfRenderingException() { $resolver = new TemplateMapResolver(); $resolver->add('exception', __DIR__ . '/_files/exception.phtml'); $this->renderer->setResolver($resolver); $strategy = new PhpRendererStrategy($this->renderer); $this->view->getEventManager()->attach($strategy); $model = new ViewModel(); $model->setTemplate('exception'); $this->event->setViewModel($model); $services = new ServiceManager(); $services->setService('Request', $this->request); $services->setService('Response', $this->response); $services->setInvokableClass('SharedEventManager', 'Zend\\EventManager\\SharedEventManager'); $services->setFactory('EventManager', function ($services) { $sharedEvents = $services->get('SharedEventManager'); $events = new EventManager(); $events->setSharedManager($sharedEvents); return $events; }, false); $application = new Application(array(), $services); $this->event->setApplication($application); $test = (object) array('flag' => false); $application->getEventManager()->attach(MvcEvent::EVENT_RENDER_ERROR, function ($e) use($test) { $test->flag = true; $test->error = $e->getError(); $test->exception = $e->getParam('exception'); }); $this->strategy->render($this->event); $this->assertTrue($test->flag); $this->assertEquals(Application::ERROR_EXCEPTION, $test->error); $this->assertInstanceOf('Exception', $test->exception); $this->assertContains('script', $test->exception->getMessage()); }