/** * Gets the layout. * * @return \Es\Mvc\ViewModelInterface The layout */ public function getLayout() { if (!$this->layout) { $layout = new ViewModel(); $layout->setTemplate('layout/layout'); $this->layout = $layout; } return $this->layout; }
/** * 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 testRenderIgnoreModelWithoutGroupId() { $root = new ViewModel(); $ignored = new ViewModel(); $root->addChild($ignored); $ignored->setGroupId(null); $events = $this->getMock(Events::CLASS, ['trigger']); $view = new View(); $view->setEvents($events); $events->expects($this->atLeastOnce())->method('trigger')->with($this->callback(function ($event) use($ignored) { $this->assertInstanceOf(ViewEvent::CLASS, $event); $model = $event->getContext(); $this->assertInstanceOf(ViewModelInterface::CLASS, $model); if ($model === $ignored) { return false; } return true; })); $view->render($root); }
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 testGetIterator() { $root = new ViewModel(); $child = new ViewModel(); $root->addChild($child, 'foo'); $iterator = $root->getIterator(); $this->assertInstanceOf(ArrayIterator::CLASS, $iterator); $children = $iterator->getArrayCopy(); $this->assertSame([$child], $children); }
public function testRenderMergesAndSetsVariablesUsingViewModelVariables() { $file = $this->files . 'local_variables.phtml'; $template = 'foo/foo'; $modelVariables = ['foo' => 'foo']; $directVariables = ['bar' => 'bar']; $model = new ViewModel($modelVariables); $model->setTemplate($template); $renderer = new Renderer(); $resolver = $this->getMock(Resolver::CLASS); $renderer->setResolver($resolver); $resolver->expects($this->once())->method('resolve')->with($this->identicalTo($template))->will($this->returnValue($file)); $this->assertSame('foobar', $renderer->render($model, $directVariables)); }