/** * Renders a template fragment using its own template engine, its own * variable scope and (optional) its own module. * * @param string $template The name of template * @param array $values Optional; the variables to populate in the view * @param null|string $module Optional; the module namespace * * @return string The result of rendering */ public function __invoke($template, array $values = [], $module = null) { $model = new ViewModel($values); $model->setTemplate($template); if (!empty($module)) { $model->setModule($module); } $events = $this->getEvents(); $event = new ViewEvent($model); $events->trigger($event); return $event->getResult(); }
public function testInvokeOnSuccess() { $server = new Server(); $request = $server->getRequest(); $server->setRequest($request->withAttribute('action', 'foo')); $model = new ViewModel(); $model->setModule(__NAMESPACE__); $event = new SystemEvent(); $event->setResult(SystemEvent::DISPATCH, $model); $event->setContext(new FakeController()); $listener = new InjectTemplateListener(); $listener->setServer($server); $listener($event); $this->assertSame('fake/foo', $model->getTemplate()); }
public function testInvokeDoesNothingIfModuleIsAlreadySpecifiedInViewModel() { $modules = new Modules(); $module = $this->getMock(AbstractModule::CLASS); $modules->set(__NAMESPACE__, $module); $view = new View(); $layout = $view->getLayout(); $layout->setModule('Foo'); $listener = new InjectModuleListener(); $listener->setModules($modules); $listener->setView($view); $event = new SystemEvent(); $model = new ViewModel(); $model->setModule('Bar'); $controller = new FakeController(); $event->setContext($controller); $event->setResult(SystemEvent::DISPATCH, $model); $listener($event); $this->assertSame('Foo', $layout->getModule()); $this->assertSame('Bar', $model->getModule()); }
public function testGetModule() { $model = new ViewModel(); $model->setModule('Foo'); $this->assertSame('Foo', $model->getModule()); }
public function testRenderRendersViewModel() { $file = $this->files . 'foo.phtml'; $template = 'foo/foo'; $module = 'Foo'; $model = new ViewModel(); $model->setTemplate($template); $model->setModule($module); $renderer = new Renderer(); $resolver = $this->getMock(Resolver::CLASS); $renderer->setResolver($resolver); $resolver->expects($this->once())->method('resolve')->with($this->identicalTo($template), $this->identicalTo($module))->will($this->returnValue($file)); $this->assertSame('foo', $renderer->render($model)); }