Esempio n. 1
0
 /**
  * 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;
 }
Esempio n. 2
0
 /**
  * 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());
 }
Esempio n. 4
0
 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());
 }
Esempio n. 6
0
 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);
 }
Esempio n. 7
0
 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));
 }