/** * Configures the View for eZ View controllers. * * @param FilterControllerEvent $event * * @throws \Symfony\Component\Security\Core\Exception\AccessDeniedException */ public function getController(FilterControllerEvent $event) { $request = $event->getRequest(); if (($viewBuilder = $this->viewBuilderRegistry->getFromRegistry($request->attributes->get('_controller'))) === null) { return; } $parameterEvent = new FilterViewBuilderParametersEvent(clone $request); $this->eventDispatcher->dispatch(ViewEvents::FILTER_BUILDER_PARAMETERS, $parameterEvent); $view = $viewBuilder->buildView($parameterEvent->getParameters()->all()); $request->attributes->set('view', $view); // View parameters are added as request attributes so that they are available as controller action parameters $request->attributes->add($view->getParameters()); if (($controllerReference = $view->getControllerReference()) instanceof ControllerReference) { $request->attributes->set('_controller', $controllerReference->controller); $event->setController($this->controllerResolver->getController($request)); } }
public function testGetControllerMatchedView() { $id = 123; $viewType = 'full'; $templateIdentifier = 'FooBundle:full:template.twig.html'; $customController = 'FooBundle::bar'; $this->request->attributes->add(array('_controller' => 'ez_content:viewLocation', 'locationId' => $id, 'viewType' => $viewType)); $this->viewBuilderRegistry->expects($this->once())->method('getFromRegistry')->will($this->returnValue($this->viewBuilderMock)); $viewObject = new ContentView($templateIdentifier); $viewObject->setControllerReference(new ControllerReference($customController)); $this->viewBuilderMock->expects($this->once())->method('buildView')->will($this->returnValue($viewObject)); $this->event->expects($this->once())->method('setController'); $this->controllerListener->getController($this->event); $this->assertEquals($customController, $this->request->attributes->get('_controller')); $expectedView = new ContentView(); $expectedView->setTemplateIdentifier($templateIdentifier); $expectedView->setControllerReference(new ControllerReference($customController)); $this->assertEquals($expectedView, $this->request->attributes->get('view')); }